Python documentation表示sys.path
是“从环境变量PYTHONPATH
初始化的,加上依赖于安装的默认值。”
但是,对于Windows来说,“依赖于安装的默认值”是什么?
(我知道这可能取决于如何编译python,但如果我只有二进制文件,有没有办法弄清楚如何构造默认的sys.path
?)
澄清:
我不是在问“我的sys.path
是什么?”。我想知道“Python如何构建sys.path?”文档说sys.path
构造为sys.path[0]
是脚本的当前目录,加上Python在PYTHONPATH
环境变量中找到的内容,加上一些依赖于安装的voodoo。那神秘的伏都教部分是什么?
答案 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.prefix
和sys.exec_prefix
构建的。在我的计算机上,它们都指向C:\Python27
。默认情况下,它会搜索lib/site-packages
。现在,条目C:\Python27; C:\Python27\lib\site-packages
将附加到上面的列表中。
接下来,它按字母顺序搜索每个.pth
个文件。我的网站包中有easy_install.pth
,pywin32.pth
和setuptools.pth
。事情开始变得怪异。如果.pth
文件中的条目只是目录位置,那将是直截了当的。它们只会逐行附加到sys.path
。但是easy_install.pth
有一些python代码会导致easy_install.pth
中列出的条目在sys.path
列表的开头添加包列表。
在此之后,pywin32.pth
,setuptools.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变量。