用Python设置sys.path的时间是什么时候?

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 site.py蟒的冰,当启动《自动进口interpreter(除非你启动它。"-S选项)。少看paths是IP的interpreter本身在初始化(你可以找到与我市启动Python -S)。

additionally框架(,这样认为Django在修改后sys.pathStartup)来满足他们的要求。

site模块有一个很好的文件,源代码和一commented打印出来的一些信息,如果你运行它通过python -m site


从学习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 /usr/bin/python系统。

从冰上sys.path Python的系统文件来启动。

不要触摸那些档案,site.py ',因为这可能perturb的系统。

然而,你可以改变sys.path在Python的,特别是,启动:

在.bashrc~/~/或.zshrc:

export PYTHONSTARTUP=~/.pythonrc

在.pythonrc~/:

两个sys.path写你的变化。

这些变化将只有你在交互式shell。

黑客攻击的风险要小的系统,安装你自己的和更多最近的Python版本。


注:如果也PYTHONHOMEenv是冰上的标准,图书馆将从这个-而不是默认的路径,为documented。

这是不是一个直接的回答两个问题,但没有发现什么错误性的这两个标准的图书馆时,我在这里searches沿着指引我的路。


综合两个accepted答案和addressing评论说"这一模块不应该从sys.pathremove一项:

这是broadly但有威胁的情况下,你可能会想修改sys.path市值解。例如这是Mac的特异性;* nix / Windows corollaries可能存在-如果你创建一customised Python.framework为包含在你自己的项目,你可以不理想的默认值,sys.pathPython.framework点的系统。

你总是有一个选择:

  • site.py黑客"AA",damirv indicates,或

  • 添加你自己的sitecustomize模块(或包装)的自定义框架,achieves比相同的结果。为表示在site.py评论(2.7.6,无论如何):


    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.