python - 什么设置 sys.path 与 Python,什么时候?

标签 python path

当我运行时

import sys 
print sys.path

在我的 Mac(Mac OS X 10.6.5、Python 2.6.1)上,我得到以下结果。

/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

They are grouped into 5 categories.

  • /Library/Python/2.6/site-packages/*.egg
  • /Library/Python/2.6/site-packages
  • Frameworks/Python.framework/Versions/2.6/lib/python2.6
  • Frameworks/Python.framework/Versions/2.6/Extras/lib/python
  • PATH from PYTHONPATH environment variable.

And I can add more paths using the code

sys.path.insert(0, MORE_PATH)
  • 哪些例程设置了这些路径,何时设置?
  • 有些路径是在 python 源代码中构建的吗?
  • 是否有可能忽略使用“sys.path.insert”插入的路径?我对此很好奇,与 mod_wsgi 一样,我发现使用“sys.path.insert”找不到路径。我问 another post这个问题。

添加

根据 Michael 的回答,我查看了 site.py,得到了以下代码。

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 的目录名称(我的 Mac 是/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6)内置到 Python 源代码中。

最佳答案

大部分内容是在 Python 的 site.py 中设置的,该文件在启动解释器时会自动导入(除非您使用 -S 选项启动它)。在初始化过程中,解释器本身很少设置路径(您可以通过使用 -S 启动 python 来找出哪些路径)。

此外,一些框架(我认为像 Django)会在启动时修改 sys.path 以满足他们的要求。

site 模块有一个不错的 documentation ,评论 source code如果你通过 python -m site 运行它会打印出一些信息。

关于python - 什么设置 sys.path 与 Python,什么时候?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4271494/

相关文章:

Android:确定 Android 路径占用的像素

opencv - 什么是windows系统路径?-关于Devcpp Opencv

php - 如何将路径添加到 Apache PATH 变量?

python - 如何在linux中的wxpython面板中播放SWF

python - 使用 selenium 和 webdriver (chrome) 在 Instagram 中填写登录表单 python OSX

python - Pysnmp 命令响应程序包装器

java - 加载启动文件

python - 如何在 Flask 中安全获取用户的真实 IP 地址(使用 mod_wsgi)?

python - 如何在 yattag 中添加提取的 html?

java - JVMJ9VM007E 命令行选项无法识别 : -javaagent