site ---站点特定配置挂钩

源代码: Lib/site.py


此模块在初始化期间自动导入。 可以使用解释器的 -S 选择权。

导入此模块会将特定于站点的路径附加到模块搜索路径并添加一些内置项,除非 -S 使用。在这种情况下,可以安全地导入该模块,而不需要对模块搜索路径进行自动修改或对内置模块进行添加。要显式触发通常特定于站点的添加,请调用 site.main() 功能。

在 3.3 版更改: 导入用于触发路径操作的模块,即使使用 -S .

它首先从头部和尾部构造最多四个目录。对于头部,它使用 sys.prefixsys.exec_prefix ;跳过空磁头。对于尾部,它使用空字符串,然后 lib/site-packages (在Windows上)或 lib/python{X.Y}/site-packages (在Unix和Macintosh上)。对于每个不同的head-tail组合,它将查看它是否引用现有目录,如果引用,则将其添加到 sys.path 并检查新添加的配置文件路径。

在 3.5 版更改: 已删除对“site python”目录的支持。

如果名为“pyvenv.cfg”的文件在sys.executable上存在一个目录,则sys.prefix和sys.exec_prefix将设置为该目录,并检查站点包(sys.base_prefix和sys.base_exec_prefix始终是python安装的“real”前缀)。如果“pyvenv.cfg”(引导配置文件)包含键“include system site packages”(包括系统站点包)设置为“true”(不区分大小写)以外的任何值,则不会搜索系统级前缀以查找站点包;否则,它们将搜索。

路径配置文件是其名称具有以下形式的文件 {name}.pth 并且存在于上述四个目录中的一个;其内容是要添加到的附加项(每行一个) sys.path . 不存在的项从不添加到 sys.path ,并且不会检查该项是否引用目录而不是文件。没有项目添加到 sys.path 不止一次。空行和以开头的行 # 跳过。从开始的行 import (后跟空格或制表符)将被执行。

注解

中的可执行行 .pth 文件在每次Python启动时运行,而不管是否实际要使用特定的模块。因此,其影响应保持在最低限度。可执行行的主要目的是使相应的模块可导入(加载第三方导入挂钩,调整 PATH 等等)。任何其他的初始化都应该在模块的实际导入时完成,如果和当它发生的时候。将代码块限制为一行是一种刻意的措施,可以阻止在这里放置任何更复杂的代码块。

例如,假设 sys.prefixsys.exec_prefix 设置为 /usr/local . 然后,python x.y库安装在 /usr/local/lib/python{X.Y} . 假设它有一个子目录 /usr/local/lib/python{X.Y}/site-packages 有三个子目录, foobarspam 和两个路径配置文件, foo.pthbar.pth . 假定 foo.pth 包含以下内容:

# foo package configuration

foo
bar
bletch

bar.pth 包含::

# bar package configuration

bar

然后将以下特定于版本的目录添加到 sys.path ,按此顺序:

/usr/local/lib/pythonX.Y/site-packages/bar
/usr/local/lib/pythonX.Y/site-packages/foo

注意 bletch 因为它不存在而被省略; bar 目录位于 foo 目录是因为 bar.pth 之前按字母顺序排列 foo.pth ;和 spam 省略,因为这两个路径配置文件中都没有提到。

在这些路径操作之后,将尝试导入名为 sitecustomize 可以执行任意特定于站点的自定义。它通常由系统管理员在站点包目录中创建。如果此导入失败, ImportError 或其子类异常,以及异常 name 属性等于 'sitecustomize' ,它被静默地忽略。如果启动python时没有可用的输出流,如 pythonw.exe 在Windows上(默认情况下用于启动空闲),尝试从 sitecustomize 被忽略。任何其他的异常都会导致这个过程的无声的,甚至是神秘的失败。

在此之后,尝试导入名为 usercustomize ,它可以执行任意用户特定的自定义,如果 ENABLE_USER_SITE 是真的。此文件将在用户站点包目录(见下文)中创建,该目录是 sys.path 除非被禁用 -s . 如果此导入失败, ImportError 或其子类异常,以及异常 name 属性等于 'usercustomize' ,它被静默地忽略。

注意,对于一些非UNIX系统, sys.prefixsys.exec_prefix 为空,并且跳过路径操作;但是,导入 sitecustomizeusercustomize 仍在尝试。

读线配置

在支持的系统上 readline ,此模块还将导入和配置 rlcompleter 模块,如果python是在 interactive mode 而没有 -S 选择权。默认行为是启用选项卡完成并使用 ~/.python_history 作为历史记录保存文件。要禁用它,请删除(或覆盖) sys.__interactivehook__ 你的属性 sitecustomizeusercustomize 模块或您的 PYTHONSTARTUP 文件。

在 3.4 版更改: 自动激活rlcompleter和历史记录。

模块内容

site.PREFIXES

站点包目录的前缀列表。

site.ENABLE_USER_SITE

显示用户网站包目录状态的标志。 True 表示已启用并添加到 sys.path . False 表示它已被用户请求禁用(使用 -sPYTHONNOUSERSITENone 表示由于安全原因(用户或组ID与有效ID不匹配)或由管理员禁用。

site.USER_SITE

运行python的用户站点包的路径。可以是 None 如果 getusersitepackages() 还没调用。默认值为 ~/.local/lib/python{X.Y}/site-packages 对于Unix和非框架Mac OS X构建, ~/Library/Python/{X.Y}/lib/python/site-packages 对于Mac框架构建,以及 {%APPDATA%}\Python\Python{XY}\site-packages 在Windows上。这个目录是一个站点目录,这意味着 .pth 其中的文件将被处理。

site.USER_BASE

用户网站包的基本目录的路径。可以是 None 如果 getuserbase() 还没调用。默认值为 ~/.local 对于Unix和Mac OS X非框架构建, ~/Library/Python/{X.Y} 对于Mac框架构建,以及 {%APPDATA%}\Python 对于Windows。distuils使用该值计算脚本、数据文件、python模块等的安装目录。 user installation scheme . 也见 PYTHONUSERBASE .

site.main()

将所有标准站点特定目录添加到模块搜索路径。在导入此模块时自动调用此函数,除非用 -S flag。

在 3.3 版更改: 此函数以前是无条件调用的。

site.addsitedir(sitedir, known_paths=None)

向sys.path添加目录并处理其 .pth 文件夹。通常用于 sitecustomizeusercustomize (见上文)。

site.getsitepackages()

返回包含所有全局网站包目录的列表。

3.2 新版功能.

site.getuserbase()

返回用户基目录的路径, USER_BASE . 如果它还没有初始化,这个函数还将设置它,考虑 PYTHONUSERBASE .

3.2 新版功能.

site.getusersitepackages()

返回特定于用户的站点包目录的路径。 USER_SITE 。如果它尚未初始化,此函数也会设置它, USER_BASE 。确定是否将用户特定的站点包添加到 sys.path ENABLE_USER_SITE 应该使用。

3.2 新版功能.

命令行界面

这个 site 模块还提供了从命令行获取用户目录的方法:

$ python3 -m site --user-site
/home/user/.local/lib/python3.3/site-packages

如果在没有参数的情况下调用它,它将打印 sys.path 在标准输出上,后跟 USER_BASE 以及目录是否存在,那么对于 USER_SITE 最后是 ENABLE_USER_SITE .

--user-base

打印用户基目录的路径。

--user-site

打印用户网站包目录的路径。

如果同时给出这两个选项,则将打印用户库和用户站点(始终按此顺序),并用分隔符分隔 os.pathsep .

如果给定任何选项,脚本将退出,并使用以下值之一: 0 如果启用了用户站点包目录, 1 如果被用户禁用, 2 如果由于安全原因或由管理员禁用,并且如果出现错误,值大于2。

参见

PEP 370 --每用户站点包目录