为什么导入时我的Python 2.6自动解压缩鸡蛋文件?

时间:2011-09-02 15:58:51

标签: python import easy-install egg

我认为Python导入应该是自动的 解压缩site-packages中的egg文件。

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

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

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

(3)我重命名了目录suds。仍然找不到它。

(4)最后我将suds目录从解压缩的egg目录中复制到了 site-packags和Python发现它(毫不奇怪)。

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

鲁弗斯

1 个答案:

答案 0 :(得分:1)

默认情况下(如果您尚未指定多版本模式),easy_installing 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中。因此,请确保在安装鸡蛋后重新启动Python。

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

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