首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

site

源代码: Lib / site.py

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

导入此模块会将特定于站点的路径附加到模块搜索路径并添加一些内置函数。

它首先从头部和尾部构建四个目录。 对于头部分,它使用sys.prefix和sys.exec_prefix; 空头被跳过。 对于尾部,它使用空字符串,然后使用lib / site-packages(在Windows上)或lib / pythonX.Y / site-packages,然后使用lib / site-python(在Unix和Macintosh上)。 对于每个不同的头尾组合,它会查看它是否指向现有目录,如果是,则将其添加到sys.path中,并检查新添加的配置文件路径。

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

在版本2.6中进行了更改:导入关键字后需要空格或制表符。

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

代码语言:javascript
复制
# foo package configuration

foo
bar
bletch

bar.pth包含:

代码语言:javascript
复制
# bar package configuration

bar

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

代码语言:javascript
复制
/usr/local/lib/pythonX.Y/site-packages/bar
/usr/local/lib/pythonX.Y/site-packages/foo

请注意,bletch因为不存在而被省略; bar目录在foo目录之前,因为bar.pth在foo.pth之前按字母顺序排列; 并且垃圾邮件被省略,因为它在任何路径配置文件中都没有提及。

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

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

请注意,对于某些非Unix系统,sys.prefix和sys.exec_prefix为空,并且跳过路径操作; 但是仍然尝试导入sitecustomize和usercustomize。

site.PREFIXES

站点包目录的前缀列表。

2.6版本中的新功能。

site.ENABLE_USER_SITE

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

2.6版本中的新功能。

site.USER_SITE

运行Python的用户站点包的路径。 如果getusersitepackages()尚未被调用,则可以为无。 默认值为?/ .local / lib / pythonX.Y / site-packages,适用于UNIX和非框架Mac OS X构建,适用于Mac框架构建的?/ Library / Python / XY / lib / python / site-packages和% Windows上的APPDATA%\ Python \ PythonXY \ site-packages。 这个目录是一个站点目录,这意味着它中的.pth文件将被处理。

2.6版本中的新功能。

site.USER_BASE

用户站点包的基本目录路径。 如果getuserbase()尚未被调用,则可以为无。 对于UNIX和Mac OS X非框架构建,默认值是?/ .local,对于Mac框架构建,?/ Library / Python / X.Y以及对于Windows的%APPDATA%\ Python。 Distutils使用此值计算用户安装方案的脚本,数据文件,Python模块等的安装目录。 另见PYTHONUSERBASE。

2.6版本中的新功能。

site.addsitedir(sitedir, known_paths=None)

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

site.getsitepackages()

返回一个包含所有全局站点包目录(也可能是站点python)的列表。

2.7版本的新功能。

site.getuserbase()

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

2.7版本的新功能。

site.getusersitepackages()

返回用户特定的站点包目录USER_SITE的路径。 如果尚未初始化,则此函数也会设置它,并遵守PYTHONNOUSERSITE和USER_BASE。

2.7版本的新功能。

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

代码语言:javascript
复制
$ python -m site --user-site
/home/user/.local/lib/python2.7/site-packages

如果在不带参数的情况下调用它,它将在标准输出中打印sys.path的内容,接着是USER_BASE的值以及目录是否存在,然后USER_SITE和ENABLE_USER_SITE的值相同。

--user-base

打印用户基目录的路径。

--user-site

打印用户site-packages目录的路径。

如果给出了这两个选项,则会打印用户群和用户站点(始终按此顺序),并由os.pathsep分隔。

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

扩展内容

PEP 370 - 每个用户网站包目录

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com