29.13. 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上)。对于每个不同的头 - 尾组合,它看到它是否指现有目录,如果是,则将其添加到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.prefixsys.exec_prefix设置为/usr/localPython 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.pth在字母之前foo.pth之前,bar目录位于foospam被省略,因为它在任一路径配置文件中未提及。

在这些路径操作之后,尝试导入名为sitecustomize的模块,该模块可以执行任意特定于站点的自定义。它通常由系统管理员在site-packages目录中创建。如果此导入失败并出现ImportError异常,则会被忽略。如果Python启动时没有可用的输出流,如Windows上的pythonw.exe(默认情况下用于启动IDLE),则会忽略sitecustomize的尝试输出。除了ImportError之外的任何异常都会导致进程无声或可能是神秘的故障。

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

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

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作为历史保存文件。要禁用它,请在您的sitecustomizeusercustomize模块或您的模块中删除(或覆盖)sys.__interactivehook__ PYTHONSTARTUP文件。

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

29.13.2. Module contents

site.PREFIXES

site-packages目录的前缀列表。

site.ENABLE_USER_SITE

标志显示用户site-packages目录的状态。True表示已启用,并已添加到sys.pathFalse表示已由用户请求停用(-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框架构建)和%APPDATA% \ PythonDistutils使用此值计算脚本,数据文件,Python模块等的安装目录。用于user installation scheme另见 PYTHONUSERBASE

site.main()

将所有标准站点特定目录添加到模块搜索路径。此模块导入时,此函数会自动调用,除非Python解释器以-S标志启动。

在版本3.3中更改:此函数用于无条件调用。

site.addsitedir(sitedir, known_paths=None)

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

site.getsitepackages()

返回一个包含所有全局site-packages目录的列表。

版本3.2中的新功能。

site.getuserbase()

返回用户基本目录USER_BASE的路径。如果尚未初始化,此功能也将设置它,遵守 PYTHONUSERBASE

版本3.2中的新功能。

site.getusersitepackages()

返回用户特定的site-packages目录USER_SITE的路径。如果尚未初始化,此函数也将设置它,遵守 PYTHONNOUSERSITEUSER_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目录