如果我有一个模块
为了更清晰地表述:我刚刚安装了zope。文件夹名称是“zope.interface-3.3.0-py2.7-win32.egg”。这可以工作:
foo
在Lib/site-packages
中,我只需要导入import foo
,就可以使用它。然而,当我从egg中安装东西时,我会得到类似于blah-4.0.1-py2.7-win32.egg
的文件夹,其中包含模块内容,但仍然只需要执行import foo
,不需要做更复杂的事情。Python是如何跟踪egg的呢?它不仅仅是目录名匹配,如果我将该文件夹放入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
,我该怎么使它工作呢?
import
语句的实现。正如他们所说:“使用源代码,卢克。” - S.Lotteggs
和easy_install
不是 Python 标准库的一部分,因此仅仅阅读有关导入模块的内容并不能真正回答提问者的问题。 - Ned Deily