4

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

但是对于 Windows,“依赖于安装的默认设置”究竟是什么?

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

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

4

3 回答 3

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包文档中所述,sys.pathsys.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目录之前添加不同的操作系统默认值,如 darwin 等.pth

于 2011-07-14T20:17:02.767 回答
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']
于 2011-07-14T19:37:47.833 回答
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 变量。

于 2011-07-14T19:38:05.433 回答