【问题标题】:Why doesn't my Python 2.6 auto-unzip egg files on import?为什么我的 Python 2.6 在导入时不自动解压缩 egg 文件?
【发布时间】:2011-11-09 07:26:34
【问题描述】:

我的印象是 Python 导入应该是自动的 解压站点包中的 egg 文件。

我的安装似乎不想自动解压缩 egg。我尝试了什么:

(1) 我使用easy_install安装了suds模块,复制了 egg 文件到站点包中。 Python 无法导入它。 (进口泡沫)

(2) 然后我使用了 --always-unzip 选项来进行 easy_install。这次它 给了我一个目录而不是一个 zip 文件。 Python 仍然无法导入 suds 模块。

(3) 我重命名了目录 suds。还是没找到。

(4) 最后我把解压后的 egg 目录中的 suds 目录复制到 site-packags 和 Python 找到了它(这并不奇怪)。

对我来说,easy_install 不是。这里缺少什么?

鲁弗斯

【问题讨论】:

标签: python import easy-install egg


【解决方案1】:

默认情况下(如果您没有指定多版本模式),easy_installing an egg 会在 site-packages 中的easy-install.pth 文件中添加一个条目。检查那里,看看是否有关于肥皂水的参考。您还可以检查 Python 导入路径(这是 Python 将搜索模块的位置列表),如下所示:

import sys
print sys.path

您是否在您easy_installed suds 之前启动的Python shell 中尝试import suds? 这可以解释你看到的行为。 .pth 文件仅在 Python 启动时读取,因此 egg 目录或 zip 文件不会出现在 sys.path 中。从 egg 目录中复制suds 目录是可行的,因为site-packages 本身已经在sys.path 中。因此,请确保在安装 egg 后重新启动 Python。

Python 将从 zip 存档导入,但不会将存档解压缩到站点包中。也就是说,它不会在您导入后将解压缩的目录留在那里。 (我认为它从 zip 文件中读取,而不是在文件系统中的任何位置提取它。)我已经看到一些包不能作为压缩鸡蛋工作的问题(他们试图从文件中的位置读取数据-系统),所以我建议始终使用 --always-unzip 标志,就像在 (2) 中所做的那样。

你没有给出你使用的命令行。您是否为 easy_install 指定了 -m 选项?这将导致egg以多版本模式安装。默认情况下它不会在 sys.path 中,您需要在尝试导入之前使用 pkg_resources.require 函数。

【讨论】:

  • 您可能正在使用“重启 Python”的想法。我不确定安装后我是否重新运行了 IDLE,并且我不确定在 ide 内重置是否足够。它会解释为什么它只在站点包的一层深处并称为“suds”时才发现它。
  • 已解决!问题在于 IDLE 的不重启。我现在在 sys.path 中看到了 suds*.egg 目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多