【发布时间】:2011-05-17 09:03:39
【问题描述】:
如果我在Lib/site-packages 中有一个模块foo,我可以只使用import foo,它会起作用。但是,当我从 egg 安装东西时,我会得到像 blah-4.0.1-py2.7-win32.egg 这样的文件夹,其中包含模块内容,但我仍然只需要做 import foo,而不是更复杂的东西。 Python如何跟踪鸡蛋?这不仅仅是 dirname 匹配,就好像我将该文件夹放入 Python 安装而不通过 dist-utils,它没有找到该模块。
更清楚一点:我刚刚安装了 zope。文件夹名称为“zope.interface-3.3.0-py2.7-win32.egg”。这有效:
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import zope.interface
>>>
我创建了一个“blah-4.0.1-py2.7-win32.egg”文件夹,其中包含一个空模块“haha”(以及__init__.py)。这不起作用:
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import blah.haha
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named blah.haha
>>>
虽然如此:
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pkg_resources import require
>>> require("blah>=1.0")
[blah 4.0.1 (c:\python27\lib\site-packages\blah-4.0.1-py2.7-win32.egg)]
>>> import haha
>>>
那么我如何在没有require 的情况下使其工作?
【问题讨论】:
-
Python 源代码对您完全可用。您可以毫不费力地阅读
import语句的实现。正如他们所说:“使用源头,卢克。” -
@S.Lott:任何问题都可以通过不同级别的“自己动手”来回答。这不是这个网站的用途。这也更有效率。与其让我仔细研究源代码并浪费一个小时左右,让我不开心,我可以在这里问这个,偶尔回来看看,得到我的答案,开心起来,让别人给他们释放多巴胺,如果其他人想知道,请让这个问题出现在谷歌上。
-
“浪费一个小时”?真的吗?浪费似乎很苛刻。你会学到很多东西。而且,更进一步,这部分的 doco 似乎相当完整。 docs.python.org/library/modules.html#importing-modules。我很惊讶你没有从文档开始。
-
S.Lott:
eggs和easy_install不是 Python 标准库的一部分,因此仅阅读有关导入模块的信息并不能真正回答 OP 的问题。 -
@S.Lott:是的,浪费很严重。我也会学到一些东西。我真正想要的是比较优势。已经知道这一点的其他人可以花更少的时间回答我的问题。另外,我仍然学习这样做,虽然不是很好,我同意,因为我不必那么努力地工作。我也同意第二个问题出现,不应该立即跳到 SO 上,而是自己尝试一下,首先。但是说了这么多,我觉得问这个问题是值得的。
标签: python module installation easy-install egg