Si tengo un módulo, foo
, en Lib/site-packages
, puedo simplemente import foo
y funcionará. Sin embargo, cuando instalo cosas de huevos, obtengo algo como blah-4.0.1-py2.7-win32.egg
como una carpeta, con el contenido del módulo dentro, pero aún así solo necesito hacer import foo
, nada complicado. ¿Cómo hace Python para rastrear los huevos? No es solo coincidencia de nombres de directorios como si dejo caer esa carpeta en una instalación de Python sin pasar por dist-utils, no encuentra el módulo.¿Cómo hace Python un seguimiento de los módulos instalados con huevos?
Para ser más claros: Acabo de instalar zope. El nombre de la carpeta es "zope.interface-3.3.0-py2.7-win32.egg". Esto funciona:
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
>>>
creo una carpeta "bla-4.0.1-py2.7-win32.egg" con un módulo vacío "jaja" en ella (y __init__.py
). Esto no funciona:
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
>>>
Esto hace, sin embargo:
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
>>>
Entonces, ¿cómo hacer que funcione sin require
?
La fuente de Python está completamente disponible para usted. Puede leer la implementación de la declaración 'import' sin demasiados problemas. Como dicen: "Use the Source, Luke". –
@ S.Lott: cualquier pregunta puede responderse con un nivel diferente de "hágalo usted mismo". para eso no es este sitio. esto también es más eficiente. en lugar de mirar detenidamente la fuente y perder una hora más o menos, lo que me hace infeliz, puedo pedirle esto aquí, volver a consultar de vez en cuando, obtener mi respuesta, ser feliz, dar un representante a otra persona para darles su liberación de dopamina, hacer que esta pregunta aparezca en google si alguien más quiere saber, etc. – Claudiu
"perdiendo una hora"? De Verdad? El desperdicio parece duro. Aprenderás mucho Y, además, esta parte del doco parece bastante completa. http://docs.python.org/library/modules.html#importing-modules. Me sorprende que no hayas comenzado con la documentación. –