2011-09-02 20 views
1

我的印象是,Python导入应该自动将网站包中的egg文件解压缩到 。为什么我的Python 2.6不能在导入时自动解压缩蛋文件?

我的安装似乎不想自动解压缩蛋。我试过的:

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

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

(3)我重命名了目录suds。仍然无法找到它。 (4)最后,我将解压后的egg目录中的suds目录复制到 site-packags中,并且Python发现它(这里并不令人意外)。

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

鲁弗斯

+0

你使用Eclipse PyDev吗? – fjsj

+0

不,在这种情况下只是空闲 – RufusVS

+0

已解决 - 安装后我从未重新启动IDLE。 – RufusVS

回答

1

默认情况下(如果您还没有指定多版模式),easy_installing一个鸡蛋会加重easy-install.pth文件中的站点包的条目。在那里查看是否有参考泡沫鸡蛋。您还可以检查Python的导入路径(这是地方名单Python会搜索模块)是这样的:

import sys 
print sys.path 

你尝试在Python外壳import suds你easy_installed泡沫之前开始?这将解释你看到的行为。 .pth文件仅在Python启动时读取,因此egg目录或zip文件不会出现在sys.path中。复制suds dir从egg目录内部工作,因为site-packages本身已经在sys.path。所以确保你在安装一个egg之后重新启动Python。

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

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

+0

您可能会对“重启Python”的想法感兴趣。我不确定在安装后我是否重新运行了IDLE,并且我不确定在IDE中重置是否足够。这可以解释为什么它只在网站包装中的一层级时才发现它,并称之为“泡沫”。 – RufusVS

+0

解决!这是IDLE的非重启问题。我现在在sys.path中看到suds * .egg目录。 – RufusVS

相关问题