You are here:  Home » Python » – 特定于站点的配置hook-Python Runtime Services(Python教程)(参考资料)

site– 特定于站点的配置挂钩

源代码: Lib / site.py


初始化期间自动导入该模块.自动导入可以是抑制使用解释器的-S选项.

导入此模块会将特定于站点的路径附加到模块搜索pathand中添加一些内置,除非使用了-S。在这种情况下,可以安全地导入此模块,而不会自动修改模块搜索路径或内置增加。要明确触发通常的站点特定添加,请调用site.main() function.

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

首先从头部和尾部构建最多四个目录。对于头部,它使用sys.prefixsys.exec_prefix;空头颅跳过。对于尾部,它使用空字符串然后lib/site-packages(在Windows上)或lib/pythonX.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”(不区分大小写),则仍会为site-packages搜索系统级前缀;否则他们不会.

路径配置文件是一个名称格式为name.pth并存在于上述四个目录之一;它的内容是要添加到sys.path的附加项(每行一个)。不存在的项目永远不会添加到sys.path,也不会检查该项目是指参考文件而不是文件。没有项目添加到sys.path更多。以#开头的空行和行被跳过。以import开头的行(后跟空格或制表符)执行.

例如,假设sys.prefixsys.exec_prefix设置为/usr/local。然后将Python X.Y库安装在/usr/local/lib/pythonX.Y中。假设这个有一个子目录/usr/local/lib/pythonX.Y/site-packages和三个子目录,foo, barspam,以及两个路径配置文件,foo.pthbar.pth。假设foo.pth包含以下内容:

# foo package configurationfoobarbletch

bar.pth包含:

# bar package configurationbar

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

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

注意bletch被省略,因为它不存在;bar目录位于foo目录之前,因为bar.pthfoo.pth之前以字母顺序排列;和spam由于在路径配置文件中没有提到,因此省略了它.

在这些路径操作之后,尝试导入名为sitecustomize的模块,该模块可以执行任意特定于站点的自定义。它是通常由site-packagesdirectory中的系统管理员创建。如果导入失败并带有ImportError或其子类的异常,并且异常的name属性等于"sitecustomize",则会被静默忽略。如果在没有输出流的情况下启动Python,就像Windows上的pythonw.exe(默认情况下用于启动IDLE),将忽略来自sitecustomize的尝试输出。任何其他异常都会导致进程的无声且可能是神秘的失败.

之后,尝试导入名为usercustomize的模块,该模块可以执行任意特定于用户的自定义,如果ENABLE_USER_SITE 是真的。此文件旨在在用户site-packages目录(见下文)中创建,该目录是sys.path的一部分,除非由-s禁用。如果导入失败并带有ImportErrororits子类异常,异常的name属性等于"usercustomize",它被默认忽略.

注意对于某些非Unix系统,sys.prefixsys.exec_prefix isempty,跳过路径操作;但仍然尝试导入sitecustomizeusercustomize.

Readline configuration

在支持readline的系统上,这个模块也会导入和配置rlcompleter模块,如果在交互模式中启动Python而没有-S选项。默认行为是启用tab-completion和使用~/.python_history作为历史保存文件。要禁用它,请删除(或覆盖)sys.__interactivehook__sitecustomize模块中的usercustomize属性或PYTHONSTARTUP文件

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

模块内容

site.PREFIXES

网站包目录的前缀列表

site.ENABLE_USER_SITE

显示用户site-packages目录的状态。True意味着它被启用并被添加到sys.path. False表示已被用户请求禁用(使用-sPYTHONNOUSERSITE)。None表示它因安全原因(用户或组ID与有效ID不匹配)或由管理员而被禁用.

site.USER_SITE

对运行Python的用户site-packages的路径。可以None如果getusersitepackages()尚未被召唤。对于UNIX和非框架MacOS X构建,默认值为~/.local/lib/pythonX.Y/site-packages,对于Macframework构建,默认值为~/Library/Python/X.Y/lib/python/site-packages,在Windows上为%APPDATA%\Python\PythonXY\site-packages。该目录是一个站点目录,这意味着.pth中的文件将被处理.

site.USER_BASE

Path到用户站点包的基本目录。可以None如果getuserbase()尚未被召唤。UNIX和Mac OS X非框架版本的默认值为~/.local,Mac框架版本的默认值为~/Library/Python/X.Y,Windows的默认值为%APPDATA%\Python。Distutils使用此值来编写脚本,数据文件,Python模块等的安装目录。对于用户安装方案。另见PYTHONUSERBASE.

site.main

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

更改版本3.3:此函数曾被调用无条件地

site.addsitedirsitedir, 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.

分隔。如果给出任何选项,脚本将以以下值之一退出:0如果启用了用户site-packages目录,1如果用户已禁用,2如果出于安全原因或由管理员禁用,如果出现错误则禁用大于2

也可以看看

PEP 370 – 每个用户的站点包目录

评论被关闭。