29.13. 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上)。对于每个不同的头 - 尾组合,它看到它是否指现有目录,如果是,则将其添加到sys.path
,并且还检查新添加的配置文件路径。
在3.5版本中更改:已删除对“site-python”目录的支持。
如果一个名为“pyvenv.cfg”的文件存在于sys.executable之上的一个目录下,sys.prefix和sys.exec_prefix被设置为该目录,并且还检查site-packages(sys.base_prefix和sys.base_exec_prefix将始终是“真正的”前缀的Python安装)。如果“pyvenv.cfg”(引导配置文件)包含设置为“false”(不区分大小写)以外的任何内容的关键字“include-system-site-packages”,系统级前缀仍将搜索站点 - 包装;否则他们不会。
路径配置文件是名称形式为name .pth
并存在于上述四个目录中的文件;其内容是要添加到sys.path
的附加项目(每行一个)。不存在的项目从不会添加到sys.path
。没有任何项目添加到sys.path
多次。将跳过以#
开头的空行和行。以import
开头的行(后跟空格或制表符)被执行。
例如,假设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.pth
在字母之前foo.pth
之前,bar
目录位于foo
和spam
被省略,因为它在任一路径配置文件中未提及。
在这些路径操作之后,尝试导入名为sitecustomize
的模块,该模块可以执行任意特定于站点的自定义。它通常由系统管理员在site-packages目录中创建。如果此导入失败并出现ImportError
异常,则会被忽略。如果Python启动时没有可用的输出流,如Windows上的pythonw.exe
(默认情况下用于启动IDLE),则会忽略sitecustomize
的尝试输出。除了ImportError
之外的任何异常都会导致进程无声或可能是神秘的故障。
此后,尝试导入名为usercustomize
的模块,如果ENABLE_USER_SITE
为true,则可以执行任意用户特定的自定义。该文件旨在在用户site-packages目录(见下文)中创建,这是sys.path
的一部分,除非由-s
禁用。将默认忽略ImportError
。
注意,对于一些非Unix系统,sys.prefix
和sys.exec_prefix
为空,并且跳过路径操作;但仍尝试导入sitecustomize
和usercustomize
。
29.13.1. Readline configuration¶
On systems that support readline
, this module will also import and configure the rlcompleter
module, if Python is started in interactive mode and without the -S
option. 默认行为是启用制表符完成,并使用~/.python_history
作为历史保存文件。要禁用它,请在您的sitecustomize
或usercustomize
模块或您的模块中删除(或覆盖)sys.__interactivehook__
PYTHONSTARTUP
文件。
在版本3.4中更改:自动激活rlcompleter和历史记录。
29.13.2. Module contents¶
-
site.
PREFIXES
¶ site-packages目录的前缀列表。
-
site.
ENABLE_USER_SITE
¶ 标志显示用户site-packages目录的状态。
True
表示已启用,并已添加到sys.path
。False
表示已由用户请求停用(-s
或PYTHONNOUSERSITE
)。None
表示由于安全原因(用户或组ID与有效ID不匹配)或管理员已禁用。
-
site.
USER_SITE
¶ 用户站点的路径 - 正在运行的Python的包。可以
None
如果getusersitepackages()
尚未被调用。对于UNIX和非框架,默认值为〜/ .local / lib / python X.Y / site-packages Mac OS X构建,
此目录是网站目录,这意味着它将处理〜/ Library / Python / X.Y / lib / python / site-packages
框架构建和%APPDATA% \ Python \ Python XY \ site-packages t10 >在Windows上。
.pth
文件。
-
site.
USER_BASE
¶ 用户site-packages的基本目录的路径。可以
None
如果getuserbase()
尚未被调用。对于UNIX和Mac OS X非框架构建,默认值为~/.local
,〜/ Library / Python / X.Y (对于Mac框架构建)和
Distutils使用此值计算脚本,数据文件,Python模块等的安装目录。用于user installation scheme。另见%APPDATA% \ Python
PYTHONUSERBASE
。
-
site.
addsitedir
(sitedir, known_paths=None)¶ 将目录添加到sys.path并处理其
.pth
文件。通常用于sitecustomize
或usercustomize
(见上文)。
-
site.
getsitepackages
()¶ 返回一个包含所有全局site-packages目录的列表。
版本3.2中的新功能。
-
site.
getuserbase
()¶ 返回用户基本目录
USER_BASE
的路径。如果尚未初始化,此功能也将设置它,遵守PYTHONUSERBASE
。版本3.2中的新功能。
-
site.
getusersitepackages
()¶ 返回用户特定的site-packages目录
USER_SITE
的路径。如果尚未初始化,此函数也将设置它,遵守PYTHONNOUSERSITE
和USER_BASE
。版本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
¶
打印用户site-packages目录的路径。
如果给出两个选项,将打印用户基本和用户站点(始终按此顺序),用os.pathsep
分隔。
如果给出任何选项,脚本将退出,其中包含以下值之一:O
如果用户site-packages目录已启用,则1
2
如果由于安全原因或管理员禁用,并且值大于2(如果存在错误)。
也可以看看
PEP 370 - 每个用户site-packages目录