在R编程语言中,有一个site.profile文件,该文件定义一些R进程在启动时执行的代码。 Python中有类似的功能吗?
编辑:为明确起见,如果用户从命令行调用python,并且从另一个进程中派生了python,则也应执行此脚本(例如,如果用户的脚本使用子进程来生成另一个python)。
答案 0 :(得分:1)
Python机制称为... site
。它是一个自动导入并设置环境的模块。如果找到模块sitecustomize.py
和usercustomize.py
,它将也导入它们。因此,这两个位置是您要放置在站点范围和个人定制中的内容,这些个性化定制要成为Python环境的永久组成部分。有关更多详细信息,请参见site
documentation。
答案 1 :(得分:1)
如果您只希望在交互式会话中使用它(而不是每次使用python myscript.py
或./myscript
运行脚本或使用python -m mymodule
运行模块时都发生),那么您想要的就是环境变量PYTHONSTARTUP
:
如果这是可读文件的名称,则在以交互方式显示第一个提示之前,将执行该文件中的Python命令。该文件在与执行交互式命令相同的名称空间中执行,因此在交互式会话中无需限定即可使用其中定义或导入的对象……
当然,如果您希望这种情况永远存在,则需要在某个适当的全局位置设置此环境变量,例如,在大多数* nix平台上的shell配置文件,或者在macOS上都配置了shell配置文件和已启动的配置文件,或Windows上“控制面板”的相应部分(几乎所有新版本的Windows都会更改相应部分,但通常名称中带有“系统”)。
如果您希望所有 all 用户(而不只是当前用户)都发生这种情况,那么有关如何设置系统范围的环境变量的详细信息应特定于平台,否则,我们的想法是一样。
如果您希望在每个 Python会话中都发生这种情况,即使其他程序正在运行Python脚本,而您甚至都不知道它正在执行此操作……您想要的是{{ 1}}或usercustomize
,如site
文档中所述:
此模块在初始化期间自动导入。可以使用解释器的-S选项禁止自动导入。
...
在执行了这些路径操作之后,尝试导入名为
sitecustomize
的模块,该模块可以执行任意特定于站点的自定义。它通常是由系统管理员在sitecustomize
目录中创建的。此后,尝试导入名为
site-packages
的模块,如果usercustomize
为true,则该模块可以执行任意特定于用户的自定义。该文件旨在在用户site-packages目录中创建(请参见下文),该目录是sys.path的一部分,除非被ENABLE_USER_SITE
禁用...
因此,您想找到一个适当的位置来覆盖此位置。首先尝试:
-s
然后,如果这没有给您python3 -m site
(可能仅适用于相当老的Python,但以防万一……),也请执行以下操作:
sys.path
如果您希望仅对当前用户进行此自定义,则要在python3 -c 'import sys; print('\n'.join(sys.path))'
列出的usercustomize.py
目录中创建USER_SITE
文件。如果该目录不存在,请创建它。
如果希望所有用户都可以使用它,则需要python3 -m site
目录之一中的sitecustomize.py
文件。问题是可能已经存在一个。例如,大多数linux发行版的内置Python软件包都有自己的sys.path
模块。如果有,sitecustomize
会告诉您它在哪里。然后,您可以进行编辑,也可以复制,编辑该副本,并将该副本放置在比原始副本python3 -c 'import sitecustomize; print(sitecustomize.__file__)
更早的位置。通常,sys.path
可能比/usr/local
更好,而/usr
可能比site-packages
更好。
答案 2 :(得分:0)
环境变量PYTHONSTARTUP
指向的文件将在启动交互式python会话时运行
并且USER_SITE/usercustomize.py
将用于非交互式python会话。
运行python -c "import site; print(site.USER_SITE)"
来找到USER_SITE
的目录位置