What sets up sys.path with Python, and when?
当我奔跑
1 2 | import sys print sys.path |
在我的Mac(Mac OS X 10.6.5、python 2.6.1)上,我得到了以下结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /Library/Python/2.6/site-packages/ply-3.3-py2.6.egg ... /Library/Python/2.6/site-packages/ipython-0.10.1-py2.6.egg /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6 /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload /Library/Python/2.6/site-packages /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode |
它们分为5类。
- /library/python/2.6/site包/*.egg
- /库/python/2.6/site-packages
- frameworks/python.framework/versions/2.6/lib/python2.6版本
- frameworks/python.framework/versions/2.6/extras/lib/python
- pythonpath环境变量的路径。
我可以使用代码添加更多路径
1 | sys.path.insert(0, MORE_PATH) |
- 什么样的程序设置了这些路径,什么时候?
- 有些路径是用Python源代码构建的吗?
- 是否可能忽略使用"sys.path.insert"插入的路径?我很好奇,和mod wsgi一样,我发现"sys.path.insert"没有找到路径。我为这个问题问了另一个帖子。
补充
根据迈克尔的回答,我查看了site.py,得到了以下代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def addsitepackages(known_paths): """Add site-packages (and possibly site-python) to sys.path""" sitedirs = [] seen = [] for prefix in PREFIXES: if not prefix or prefix in seen: continue seen.append(prefix) if sys.platform in ('os2emx', 'riscos'): sitedirs.append(os.path.join(prefix,"Lib","site-packages")) elif sys.platform == 'darwin' and prefix == sys.prefix: sitedirs.append(os.path.join("/Library/Python", sys.version[:3],"site-packages")) |
我还认为应该将site.py的目录名(/system/library/frameworks/python.framework/versions/2.6/lib/python2.6 for my mac)内置到python源代码中。
大部分的东西在冰上的IP
additionally框架(,这样认为Django在修改后
《
从学习Python。
sys.path is the module search path.
Python configures it at program
startup, automatically merging the
home directory of the top-level file
(or an empty string to designate the
current working directory), any
PYTHONPATH directories, the contents
of any .pth file paths you've
created, and the standard library
directories. The result is a list of
directory name strings that Python
searches on each import of a new file.
site.py冰德科工的答案。我想dependencies除去任何的Python这是老城市的默认安装在我的Mac。这是很好的作品,如"site.py每小时的冰,叫做《Python interpreter冰开始的。
在MAC层,添加下面的表壳,手动上弦线尽头的main()/系统/图书馆/框架/ python.framework 2.7版本/演员/ / / / / site.py Python库:
1 | sys.path = filter (lambda a: not a.startswith('/System'), sys.path) |
这些人的路径有:
- 我们paths,有你的图书馆系统
- 从Python开始流目录
- 环境变量
$PYTHONPATH - 你可以添加paths运行。
paths槽是不容忽视的。但是,他们可能不被发现,这将提高误差的不安。 sys.path应该是只读的。subtracted补充说,不从。Django会paths remove槽。
你是用Python
从冰上sys.path Python的系统文件来启动。
不要触摸那些档案,site.py ',因为这可能perturb的系统。
然而,你可以改变sys.path在Python的,特别是,启动:
在.bashrc~/~/或.zshrc:
在.pythonrc~/:
两个sys.path写你的变化。
这些变化将只有你在交互式shell。
黑客攻击的风险要小的系统,安装你自己的和更多最近的Python版本。
注:如果也
这是不是一个直接的回答两个问题,但没有发现什么错误性的这两个标准的图书馆时,我在这里searches沿着指引我的路。
综合两个accepted答案和addressing评论说"这一模块不应该从
这是broadly但有威胁的情况下,你可能会想修改
你总是有一个选择:
添加你自己的
After these path manipulations, an attempt is made to import a module
named sitecustomize, which can perform arbitrary additional
site-specific customizations. If this import fails with an
ImportError exception, it is silently ignored.