有没有办法让python启动时始终执行脚本?(类似 R 中的 site.profile)

mmn*_*yle 5 python startup

在 R 编程语言中,有一个 site.profile 文件,它定义了 R 进程在启动时执行的一些代码。Python中有类似的功能吗?

编辑:澄清一下,如果用户从命令行调用 python,而且 python 是从另一个进程生成的(例如,如果用户的脚本使用子进程生成另一个 python),则应该执行此脚本。

aba*_*ert 7

如果您只想在交互式会话中执行此操作(而不是每次使用python myscript.py或运行脚本./myscript或使用 运行模块时都发生这种情况python -m mymodule),那么您需要的是环境变量PYTHONSTARTUP

\n
\n

如果这是可读文件的名称,则在以交互模式显示第一个提示之前执行该文件中的 Python 命令。该文件在执行交互式命令的同一名称空间中执行,以便可以在交互式会话中无需限定即可使用其中定义或导入的对象\xe2\x80\xa6

\n
\n

当然,如果您希望这种情况永远发生,您需要在某个适当的全局位置 \xe2\x80\x94 例如,大多数 *nix 平台上的 shell 配置文件,或者您的 shell 配置文件和您的 shell 配置文件中设置此环境变量。 macOS 上的 launchd 配置文件,或 Windows 上控制面板的相应部分(几乎每个新版本的 Windows 中相应部分都会发生变化,但名称中通常包含“System”)。

\n

如果您希望所有用户都发生这种情况,而不仅仅是当前用户\xe2\x80\xa6,则如何设置系统范围环境变量的详细信息更加特定于平台,但除此之外,想法是相同的。

\n
\n

如果您希望每个Python 会话都发生这种情况,即使其他程序正在运行 Python 脚本,而您甚至不知道它正在这样做\xe2\x80\xa6,您想要的是 或usercustomizesitecustomize如文档中所述site文档:

\n
\n

该模块在初始化期间自动导入。可以使用解释器\xe2\x80\x99s -S 选项来抑制自动导入。

\n

\xe2\x80\xa6

\n

在这些路径操作之后,将尝试导入名为 的模块sitecustomize,该模块可以执行任意特定于站点的自定义。它通常由系统管理员在site-packages目录中创建。

\n

此后,将尝试导入名为 的模块usercustomize,如果为 true,则该模块可以执行任意特定于用户的自定义ENABLE_USER_SITE。该文件旨在在用户 site-packages 目录中创建(见下文),该目录是 sys.path 的一部分,除非被-s\xe2\x80\xa6禁用

\n
\n

所以,你想找到一个合适的地方来覆盖它。首先尝试这个:

\n
python3 -m site\n
Run Code Online (Sandbox Code Playgroud)\n

然后,如果这没有给你sys.path(可能只在相当旧的Python上,但以防万一\xe2\x80\xa6),也这样做:

\n
python3 -c "import sys; print(\'\\n\'.join(sys.path))"\n
Run Code Online (Sandbox Code Playgroud)\n

如果您希望仅对当前用户进行此自定义,则需要在列出的目录中创建一个usercustomize.py文件。如果该目录不存在,请创建它。USER_SITEpython3 -m site

\n

如果您希望所有用户都发生这种情况,则需要sitecustomize.py在其中一个sys.path目录中放置一个文件。问题是可能已经有一个了。例如,大多数 Linux 发行版的内置 Python 包都有自己的sitecustomize模块。如果有,python3 -c \'import sitecustomize; print(sitecustomize.__file__)会告诉你它在哪里。sys.path然后,您可以编辑,也可以复制它,编辑该副本,然后将该副本放置在比原始版本更早的位置。作为一般规则,/usr/local可能比 更好/usr,并且site-packages可能比dist-packages可能比其他任何东西都好。

\n

  • 当我向“sitecustomize.py”添加打印时,它似乎没有打印任何内容。 (2认同)