什么用Python设置sys.path,何时设置? [英] What sets up sys.path with Python, and when?

查看:91
本文介绍了什么用Python设置sys.path,何时设置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我跑步时

import sys 
print sys.path

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

on my Mac (Mac OS X 10.6.5, Python 2.6.1), I get the following results.


/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-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
  • PYTHONPATH环境变量中的PATH.

我可以使用代码添加更多路径

And I can add more paths using the code

sys.path.insert(0, MORE_PATH)

  • 什么例程设置这些路径,何时设置?
  • 其中一些路径是在python源代码中构建的吗?
  • 是否可能忽略用'sys.path.insert'插入的路径?我对此感到很好奇,就像使用mod_wsgi一样,我发现在"sys.path.insert"中找不到路径.我问了另一篇文章问题.
    • What routines sets up those paths, and when?
    • Are some of the paths are built in python source code?
    • Is it possible that the paths inserted with 'sys.path.insert' are ignored? I'm curious about this, as with mod_wsgi, I found the paths are not found with 'sys.path.insert'. I asked another post for this question.
    • 根据迈克尔的回答,我调查了site.py,并获得了以下代码.

      Based on Michael's answer, I looked into site.py, and I got the following code.

      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源代码中.

      I also think that the directory name that has site.py (/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6 for my Mac) should be built into Python source code.

      推荐答案

      大多数内容都是在Python的site.py中设置的,启动解释器时会自动将其导入(除非您使用-S选项启动它).初始化期间在解释器中很少设置路径(您可以通过使用-S启动python找出哪些路径).

      Most of the stuff is set up in Python's site.py which is automatically imported when starting the interpreter (unless you start it with the -S option). Few paths are set up in the interpreter itself during initialization (you can find out which by starting python with -S).

      此外,某些框架(如我认为的Django)在启动时会修改sys.path以满足其要求.

      Additionally, some frameworks (like Django I think) modify sys.path upon startup to meet their requirements.

      site模块有一个很好的文档,该注释为源代码,如果您通过.

      The site module has a pretty good documentation, a commented source code and prints out some information if you run it via python -m site.

      这篇关于什么用Python设置sys.path,何时设置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆