【问题标题】:Troubleshooting python sys.pathpython sys.path 疑难解答
【发布时间】:2011-03-31 13:36:03
【问题描述】:

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

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

我在我的 sys.path 中发现了一个导致问题的路径项,并且在追踪它时遇到了很多麻烦。我能在 Google 上看到的只是人们解释如何将项目添加PYTHONPATH 变量中。

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

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

【问题讨论】:

  • 有问题的项目只是我自己的包,我以 root 身份使用了“setup.py develop”(我感到羞耻)。操作系统是 Ubuntu Linux,但 python 是一种独立于平台的语言,我很少寻找要检查的文件/目录列表,而更多的是寻找文档、一般指南,甚至是 CPython 源代码的链接。
  • 顺便说一句,我已经找到了我的具体问题,主要是为了后代。

标签: python path


【解决方案1】:

我最近在使用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 源代码 cmets 的更多详细信息在这里 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 目录中的 .pth 文件。

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

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

【讨论】:

  • 为链接点赞。对于 Mac 或 Linux,我找不到与 getpathp.c 类似的任何东西。有吗?
  • 谢谢。 Mac 没有注册表……所以它不像使用注册表项找到正确的位置那么简单。此外,Mac 的位置将取决于制作安装程序时使用的构建选项。 FWIW,这是关于 Mac 的最佳链接。 svn.python.org/projects/python/trunk/Mac/README。我在我的 Mac 上检查了一下,Python 2.7 实际上确实安装在该文件中提到的位置。
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2014-08-29
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多