2011-03-31 72 views
13

http://docs.python.org/library/sys.html Python文档说sys.path是...故障排除蟒蛇的sys.path

从环境变量PYTHONPATH,再加上安装相关的默认初始化。

我在我的sys.path中发现了一个路径项,导致问题,并且在跟踪它时遇到了很多问题。我在Google上发布的所有内容都是解释如何项添加到PYTHONPATH变量。

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

到目前为止,我发现部分答案是在python上使用strace,并寻找.pth文件。我还发现一个sys.path_importer_cache,这可能会或可能不适用。

+0

哪个项目是? – 2011-03-31 13:44:10

+0

你在使用什么操作系统? – cwallenpoole 2011-03-31 13:46:39

+1

有问题的项目只是我自己的软件包,我曾以root身份使用过“setup.py develop”(对我很惭愧)。操作系统是Ubuntu Linux,但是python是一个独立于平台的语言,我对寻找文件/目录列表的看法较少,对于文档,一般准则甚至是到CPython源代码的链接,我更少。 – 2011-04-01 01:41:44

回答

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.pathsys.prefixsys.exec_prefix建造。在我的电脑上,他们都指向C:\Python27。默认情况下,它会搜索lib/site-packages anywways。所以现在条目C:\Python27; C:\Python27\lib\site-packages被追加到上面的列表中。

  • 接下来按字母顺序搜索每个.pth文件。我在我的网站包中有easy_install.pth,pywin32.pthsetuptools.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目录中的.pth文件。

就你而言,你可以从启动一个python shell开始,并检查sys.prefixsys.exec_prefix指向哪里,然后从那里钻取。注意2:如果您使用的是IDE,比如Aptana/PyDev,它会添加更多自己的配置。所以你需要警惕这一点。

+0

链接的荣誉。我找不到任何类似于Mac或Linux的'getpathp.c'。有一个吗? – 2011-04-01 02:01:42

+0

谢谢。 Mac没有注册表......所以它不像使用注册表键找到正确的位置那么简单。 Mac的位置也取决于制作安装程序时使用的构建选项。 FWIW,这是关于Mac的最佳链接。 http://svn.python.org/projects/python/trunk/Mac/README。我检查了我的Mac,并且Python 2.7实际上安装在该文件中提到的位置。 – 2011-04-01 03:41:25