site
---站点特定配置挂钩¶
源代码: Lib/site.py
此模块在初始化期间自动导入。 可以使用解释器的 -S
选择权。
导入此模块会将特定于站点的路径附加到模块搜索路径并添加一些内置项,除非 -S
使用。在这种情况下,可以安全地导入该模块,而不需要对模块搜索路径进行自动修改或对内置模块进行添加。要显式触发通常特定于站点的添加,请调用 site.main()
功能。
在 3.3 版更改: 导入用于触发路径操作的模块,即使使用 -S
.
它首先从头部和尾部构造最多四个目录。对于头部,它使用 sys.prefix
和 sys.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.prefix
和 sys.exec_prefix
设置为 /usr/local
. 然后,python x.y库安装在 /usr/local/lib/python{X.Y}
. 假设它有一个子目录 /usr/local/lib/python{X.Y}/site-packages
有三个子目录, foo
, bar
和 spam
和两个路径配置文件, foo.pth
和 bar.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.prefix
和 sys.exec_prefix
为空,并且跳过路径操作;但是,导入 sitecustomize
和 usercustomize
仍在尝试。
读线配置¶
在支持的系统上 readline
,此模块还将导入和配置 rlcompleter
模块,如果python是在 interactive mode 而没有 -S
选择权。默认行为是启用选项卡完成并使用 ~/.python_history
作为历史记录保存文件。要禁用它,请删除(或覆盖) sys.__interactivehook__
你的属性 sitecustomize
或 usercustomize
模块或您的 PYTHONSTARTUP
文件。
在 3.4 版更改: 自动激活rlcompleter和历史记录。
模块内容¶
- site.PREFIXES¶
站点包目录的前缀列表。
- site.ENABLE_USER_SITE¶
显示用户网站包目录状态的标志。
True
表示已启用并添加到sys.path
.False
表示它已被用户请求禁用(使用-s
或PYTHONNOUSERSITE
)None
表示由于安全原因(用户或组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.addsitedir(sitedir, known_paths=None)¶
向sys.path添加目录并处理其
.pth
文件夹。通常用于sitecustomize
或usercustomize
(见上文)。
- 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 --每用户站点包目录