Как Python отслеживает модули, установленные с яйцами?

Если у меня есть модуль, foo , в Lib / site-packages я могу просто импортировать foo , и все заработает. Однако, когда я устанавливаю что-то из яиц, я получаю что-то вроде blah-4.0.1-py2.7-win32.egg в виде папки с содержимым модуля внутри, но мне все еще нужно сделать import foo , ничего сложнее. Как Python отслеживает яйца? Это не просто сопоставление имени каталога, как если бы я перетащил эту папку в установку 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» с пустым модулем «ха-ха» (и __ 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
>>>

Итак, как мне заставить его работать без требования ?

12
задан fbmd 20 February 2013 в 13:10
поделиться