http://docs.python.org/library/sys.html的python文档说sys.path
是......
从环境变量PYTHONPATH初始化,加上依赖于安装的默认值。
我在sys.path
中找到了导致问题的路径项,并且在跟踪它时遇到了很多麻烦。我可以在Google上看到的是解释如何将项添加到PYTHONPATH
变量的人。
我的问题是:是否有任何工具可以帮助追踪为什么特定项目在sys.path
上?如何找到有关“依赖于安装的默认值”的更多信息?
到目前为止,我发现部分答案是在python本身上使用strace
并查找.pth
个文件。我还找到了sys.path_importer_cache
,可能适用也可能不适用。
答案 0 :(得分:5)
我最近遇到了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
包文档(link)中所述,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上它只是添加了不同的操作系统默认值,如darwin
等,然后开始查看site-packages
目录{ {1}}个文件。
在您的情况下,您可以首先启动python shell并检查.pth
和sys.prefix
指向的位置,然后从那里向下钻取。
注意2:如果您使用的是诸如Aptana / PyDev之类的IDE,它将添加更多自己的配置。所以你需要警惕。