python sys.path故障排除

时间:2011-03-31 13:36:03

标签: python path

http://docs.python.org/library/sys.html的python文档说sys.path是......

  

从环境变量PYTHONPATH初始化,加上依赖于安装的默认值。

我在sys.path中找到了导致问题的路径项,并且在跟踪它时遇到了很多麻烦。我可以在Google上看到的是解释如何项添加到PYTHONPATH变量的人。

我的问题是:是否有任何工具可以帮助追踪为什么特定项目在sys.path上?如何找到有关“依赖于安装的默认值”的更多信息?

到目前为止,我发现部分答案是在python本身上使用strace并查找.pth个文件。我还找到了sys.path_importer_cache,可能适用也可能不适用。

1 个答案:

答案 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.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上它只是添加了不同的操作系统默认值,如darwin等,然后开始查看site-packages目录{ {1}}个文件。

在您的情况下,您可以首先启动python shell并检查.pthsys.prefix指向的位置,然后从那里向下钻取。

注意2:如果您使用的是诸如Aptana / PyDev之类的IDE,它将添加更多自己的配置。所以你需要警惕。