在Windows中如何设置Python2的sys.path?

时间:2011-07-14 19:34:07

标签: python windows path pythonpath

Python documentation表示sys.path是“从环境变量PYTHONPATH初始化的,加上依赖于安装的默认值。”

但是,对于Windows来说,“依赖于安装的默认值”是什么?

(我知道这可能取决于如何编译python,但如果我只有二进制文件,有没有办法弄清楚如何构造默认的sys.path?)

澄清: 我不是在问“我的sys.path是什么?”。我想知道“Python如何构建sys.path?”文档说sys.path构造为sys.path[0]是脚本的当前目录,加上Python在PYTHONPATH环境变量中找到的内容,加上一些依赖于安装的voodoo。那神秘的伏都教部分是什么?

3 个答案:

答案 0 :(得分:6)

Praveen Gollakota似乎在Troubleshooting python sys.path上有很好的信息(在这里重复:)

  • 第一个添加了C:\ WINNT \ system32 \ python27.zip(更多细节见PEP273)。

  • 下一个添加的是来自Windows注册表中的条目。条目C:\Python27\DLLs;C:\Python27\lib; C:\Python27\lib\plat-win; C:\Python27\lib\lib-tk来自注册表中的HOT_KEY_LOCAL_USER/Python/PythonCore/2.7/PythonPath。这里的Python源代码注释中的更多细节http://svn.python.org/projects/python/trunk/PC/getpathp.c(这些条目对我来说是最难理解的,直到我找到上面的链接)。

  • 接下来,正如site package documentation中所述,sys.path是根据sys.prefixsys.exec_prefix构建的。在我的计算机上,它们都指向C:\Python27。默认情况下,它会搜索lib/site-packages。现在,条目C:\Python27; C:\Python27\lib\site-packages将附加到上面的列表中。

  • 接下来,它按字母顺序搜索每个.pth个文件。我的网站包中有easy_install.pthpywin32.pthsetuptools.pth。事情开始变得怪异。如果.pth文件中的条目只是目录位置,那将是直截了当的。它们只会逐行附加到sys.path。但是easy_install.pth有一些python代码会导致easy_install.pth中列出的条目在sys.path列表的开头添加包列表。

  • 在此之后,pywin32.pthsetuptools.pth中的目录条目会按预期添加到sys.path列表的末尾。

注意:虽然上面的讨论与Windows相关,但即使在Mac等也是如此。在Mac上它只是在开始查看site-packages目录.pth之前添加了不同的操作系统默认值,如darwin等。文件。

答案 1 :(得分:2)

最好的方法是检查python解释器中的实际路径:

$ python
Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pprint, sys
>>> pprint.pprint(sys.path)
['',
 'c:\\Python26\\lib\\site-packages\\setuptools-0.6c11-py2.6.egg',
 'c:\\Python26\\lib\\site-packages\\nose-1.0.0-py2.6.egg',
 'C:\\Windows\\system32\\python26.zip',
 'c:\\Python26\\DLLs',
 'c:\\Python26\\lib',
 'c:\\Python26\\lib\\plat-win',
 'c:\\Python26\\lib\\lib-tk',
 'c:\\Python26',
 'c:\\Python26\\lib\\site-packages',
 'c:\\Python26\\lib\\site-packages\\win32',
 'c:\\Python26\\lib\\site-packages\\win32\\lib',
 'c:\\Python26\\lib\\site-packages\\Pythonwin',
 'c:\\Python26\\lib\\site-packages\\wx-2.8-msw-unicode']

答案 2 :(得分:1)

您是否尝试导入sys然后打印sys.path?它似乎在我的Windows 7系统中包含以下内容:

'', 
'C:\\Windows\\system32\\python26.zip', 
'c:\\python26\\DLLs', 
'c:\\python26\\lib', 
'c:\\python26\\lib\\plat-win', 
'c:\\python26\\lib\\lib-tk', 
'c:\\python26', 
'c:\\python26\\lib\\site-packages', 
'c:\\python26\\lib\\site-packages\\win32', 
'c:\\python26\\lib\\site-packages\\win32\\lib', 
'c:\\python26\\lib\\site-packages\\Pythonwin', 
'c:\\python26\\lib\\site-packages\\wx-2.8-msw-unicode'

这对应于我安装的软件包,因为我从未需要设置自定义的PYTHONPATH变量。