Python.Module.site
site
" This module is automatically imported during initialization. The automatic import
can be suppressed using the interpreter’s -S option.
Importing this module will append site-specific paths to the module search path and add a few builtins. " Ref[1]
1. Import Path
import path 参考Ref[5]。
在解释器(interpreter)启动时,site会被自动的导入(imported)。在导入时,site扩展sys.path。
扩展的方式是使用sys.prefix 和 sys.exec_prefix。site.py中PREFIXES的定义如下,Ref[3]:
# Prefixes for site-packages; add additional prefixes like /usr/local here
PREFIXES = [sys.prefix, sys.exec_prefix]
Q: 那么sys.prefix sys.exec_prefix 和 sys.path 的含义分别是什么呢?
Ref[4]
Demo-1: 查看site.PREFIXES
import sys
import os
import platform
import site if 'Windows' in platform.platform():
SUFFIXES = [
'',
'lib/site-packages',
]
else:
SUFFIXES = [
'lib/python%s/site-packages' % sys.version[:3],
'lib/site-python',
] print 'Path prefixes:'
for p in site.PREFIXES:
print ' ', p for prefix in sorted(set(site.PREFIXES)):
for suffix in SUFFIXES:
path = os.path.join(prefix, suffix).rstrip(os.sep)
print path
print ' exists:', os.path.exists(path)
print ' in path:', path in sys.path
2. User Directories (用户目录)
http://pymotw.com/2/site/
2.1 USER_BASE 和 USER_SITE
"In addition to the global site-packages paths, site is responsible for adding the
user-specific locations to the import path." Ref[2]
Q: globale site-package 和 import path分别是什么?
user-specific path是基于USER_BASE的。在USER_BASE中的是site-packages directory,该directory的路径是
USER_SITE。
"The user-specific paths are all based on the USER_BASE directory, which usually
located in a part of the filesystem owned (and writable) by the current user."
A):
Demo-2: 查看 USER_BASE USER_SITE
import site print 'Base:', site.USER_BASE
print 'Site:', site.USER_SITE
输出是:
"
Base: /Users/XiaoKL/Library/Python/2.7
Site: /Users/XiaoKL/Library/Python/2.7/lib/python/site-packages
"
USER_BASE可以由环境变量PYTHONUSERBASE来设置。
B): 命令查看USER_BASE USER_SITE:
$ python -m site --user-base
$ python -m site --user-site
$ PYTHONUSERBASE=/tmp/$USER python -m site --user-base
$ PYTHONUSERBASE=/tmp/$USER python -m site --user-site
python的-m module-name:
"-m module-name
Searches sys.path for the named module and runs the correspond-
ing .py file as a script. " Ref[man python2.7]
2.2 Disable user directory
The user directory can also be explicitly disabled on the command line with -s.
$ python -s site_enable_user_site.py
3. Path Configuration Files (路径配置文件)
在路径被添加到import path的过程中,path configuration file被扫描解析。
A path configuration file is a plain text file with the extension .pth.
每一行可以是:
- A full or relative path to another location that should be added to the import path.
- A Python statement to be executed. All such lines must begin with an import statement.
- Blank lines are ignored.
- A line starting with # is treated as a comment and ignored.
路径配置文件的作用:
"Path configuration files can be used to extend the import path to look in locations that
would not have been added automatically. " Ref[2]
Demo-3: 没有使用路径配置文件的Case
创建一个目录with_modules。
$(ROOT_DIR)
|-- site_addsitedir.py
|
|--with_modules
|--mymodule.py
site_addsitedir.py: site_addsitedir.py
mymodule.py: mymodule.py
$ python site_addsitedir.py with_modules
"If the directory given to addsitedir() includes any files matching the pattern *.pth,
they are loaded as path configuration files." Ref[2]
Demo-4: 使用路径配置文件的Case
$(ROOT_DIR)
|-- site_addsitedir.py
|
|--with_modules
|--pymotw.pth
|--subdir
|--mymodule.py
pymotw.pth的内容是:
# Add a single subdirectory to the path.
./subdir
运行 "$ python site_addsitedir.py with_modules" 的输出如下:
__file__: site_addsitedir.py
cwd: /Users/XiaoKL/Projects/PrivateProject/PythonProject/site
basename: site_addsitedir.py
abspath: /Users/XiaoKL/Projects/PrivateProject/PythonProject/site/site_addsitedir.py
script_directory: /Users/XiaoKL/Projects/PrivateProject/PythonProject/site
module_directory: with_modules
Could not import mymodule: No module named mymodule
------------
New paths:
/Users/XiaoKL/Projects/PrivateProject/PythonProject/site/with_modules
/Users/XiaoKL/Projects/PrivateProject/PythonProject/site/with_modules/subdir
-------------
Loaded mymodule from with_modules/subdir/mymodule.py
4. sitecustomize
"The site module is also responsible for loading site-wide customization defined by the local
site owner in a sitecustomize module.
Uses for sitecustomize include extending the import path and enabling coverage, profiling, or
other development tools." Ref[2]
Demo-5: sitecustomize的使用
创建 sitecustomize.py 如下:
print 'Loading sitecustomize.py' import site
import platform
import os
import sys path = os.path.join('/opt', 'python', sys.version[:3], platform.platform())
print 'Adding new path', path site.addsitedir(path)
创建 site_sitecustomize.py 如下:
import sys print 'Running main program' print 'End of path:', sys.path[-1]
将脚本 sitecustomize.py 和 site_sitecustomize.py 都放在with_sitecustomize目录中:
with_sitecustomize/
|--sitecustomize.py
|--site_sitecustomize.py
然后执行如下命令:
$ PYTHONPATH=with_sitecustomize python with_sitecustomize/site_sitecustomize.py
输出如下:
Loading sitecustomize.py
Adding new path /opt/python/2.7/Darwin-13.4.-x86_64-i386-64bit
Running main program
End of path: /opt/python/2.7/Darwin-13.4.-x86_64-i386-64bit
"Since sitecustomize.py is meant for system-wide configuration, it should be installed somewere
in the default path (usally in the site-packages directory). This example sets PYTHONPATH explicitly
to ensure the module is picked up." Ref[2]
Q: PYTHONPATH 是个什么东西?
"The import search path list can be modified before starting the interpreter by setting
the shell variable PYTHONPATH to a colon-separated list of directories."
5. usercustomize
"Similar to sitecustomize, the usercustomize module can be used to set up user-specific settings
each time the interpreter starts up. usercustomize is loaded after sitecustomize, so site-wide
customizations can be overridden." Ref[2]
"When the user site directory feature is disabled, usercustomize is not imported" Ref[2]
6. Disabling site
-S: Disable the import of the module site and the site-dependent manipulations of sys.path that it entails.
$ python -S site_import_path.py
Reference
1. site — Site-specific configuration hook
https://docs.python.org/2/library/site.html
2. site
http://pymotw.com/2/site/
3. site.py source code
https://hg.python.org/cpython/file/2.7/Lib/site.py
4. sys-prefix & sys-exec_prefix
http://pymotw.com/2/sys/interpreter.html#sys-prefix
5. import path
https://pymotw.com/2/sys/imports.html#import-path
TODO
Running code at Python startup
Python.Module.site的更多相关文章
- install python module
[install python module] 参考:http://docs.python.org/2.7/install/index.html
- Nuke Python module的使用
最近很多脚本工作都需要脱离nuke的gui环境运行,没有了script editor就必须要尝试Nuke Python module功能了.该模式可以执行大部分在GUI环境中的命令,在自动生成或者批量 ...
- __import__ 与动态加载 python module
原文出处: koala bear Direct use of __import__() is rare, except in cases where you want to import a m ...
- Python module中的全局变量
Python module中的全局变量 我想要实现一个python module,这个module中有一些配置项,这些配置项可以被读取,被修改.一个可行的方案是把这些配置项写到一个叫settings. ...
- Python module all in one
Python module all in one Python Modules https://docs.python.org/3/tutorial/modules.html Fibonacc # F ...
- import 本地Python module或package
很基础很重要的一课,虽然很简单,但是防止以后忘了,还是记下来 这个笔记里说的都是import本地的,自己创建的,或者复制粘贴的别人的,总之“不是安装到library”的module or packag ...
- python module的结构
python有很多module,下面是module的结构图: 拿httplib做例子,httlip module有: 4个class( HTTPConnection,HTTPSConnection,H ...
- Python : Module
在Python中,一个.py文件代表一个Module.在Module中可以是任何的符合Python文件格式的Python脚本.了解Module导入机制大有用处. 1 Module 组成 1.1 Mod ...
- python module install
1.issue: How can I bypass kivy module error: ImportError: DLL load failed: The specified module coul ...
随机推荐
- Python学习一(面向对象和函数式编程)
学习了一周的Python,虽然一本书还没看完但是也收获颇多,作为一个老码农竟然想起了曾经荒废好久的园子,写点东西当做是学习笔记吧 对Python的语法看的七七八八了,比较让我关注的还是他编程的思想,那 ...
- 解决MD5问题
使用VS时报错此实现不是 Windows 平台 FIPS 验证的加密算法的一部分. 解决方案如下:在window中打开功能里输入regedit,回车打开注册器.然后进入如下路径中 HKEY_LOCAL ...
- 调用百度地图API出现 error inflating class com.baidu.mapapi.map.mapview
问题如下 本来以为解决了,但后来重新运行了一下,又坏了,然后改成原来的样子,又好了. 结果就是:对不住了各位看官,没找到解决办法,不过经测试有个地方,可能在程序运行时,出现error inflatin ...
- MVC中Control和View之间数据传递的方式
1:ViewBag和ViewData 具体区别不做讨论,本处只演示ViewData的具体示例: Controler代码:ViewData["Employee"] = emp; Vi ...
- EI目录下载地址及保护密码
EI目录下载地址:http://www.elsevier.com/solutions/engineering-village/content EI工作薄保护密码:AAAAABABAABD
- MySQL之权限管理
MySQL之权限管理 一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作, 那么你就不能执行update操作.只 ...
- BAT的面试经验_摘抄
一.心态 心态很重要! 心态很重要! 心态很重要! 重要的事情说三遍,这一点我觉得是必须放到前面来讲. 找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公 ...
- ubuntu客户端使用RDP协议连接windows服务器
如果服务器是linux或unix,可以使用ssh远程连接服务器.也有服务器是windows的,通常使用RDP协议进行连接. 1 环境 客户端:ubuntu14.04 LST 服务器:windows ...
- Spring-Batch CSV文件读取时的注意点
按照Spring Batch 之 Sample(CSV文件操作)(四) 的方式配置好csvItemReader, 发现读入的数据很是奇怪,通过修改配置文件发现, commit-interval=&qu ...
- hive中rcfile格式(收藏文)
首先声明,此文是属于纯粹收藏文,感觉讲的很不错. 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮 ...