Me pregunto por qué el directorio (subpaquete) que contiene submódulos en un paquete python aparece como un símbolo cuando se importa el paquete. Por ejemplo, si tengo este paquete:paquete de importación python - subpaquete no debería aparecer en la tabla de símbolos
PyModTest/ Top-level package
__init__.py Initialize the package
Source/ Subpackage holding source files
__init__.py
WildMod.py Submodule containing a function: 'WildFunc'
donde el __init__.py nivel superior se parece a esto:
#!/usr/bin/env python
from Source.WildMod import WildFunc
y, por el amor integridad, el __init__.py nivel inferior tiene este aspecto :
#!/usr/bin/env python
__all__ = ["WildMod"]
OK, por lo que ahora abro el intérprete, importar el módulo, y mirar los símbolos:
>>> import PyModTest
>>> dir(PyModTest)
['Source', 'WildFunc', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
SEE, aparece el módulo 'Fuente', ¡aunque nunca lo importé específicamente!
El único símbolo (además de los privados) que quiero ver es mi 'WildFunc'. ¿Hay alguna forma de ocultar el paquete 'Fuente'?
Impresionante, eso tiene sentido. Gracias por la sugerencia sobre 'del Source' :) – rokuingh
'Source' es un subpaquete de' PyModTest', la importación implícita se transforma silenciosamente en 'from PyModTest.Source import ...', y entonces el módulo 'Source' debe se agregará como un atributo del módulo 'PyModTest'. Si se ha encontrado 'Source' fuera del paquete' PyModTest' (improbable, los subpaquetes tienen prioridad sobre 'sys.path'), esto no habría ocurrido. Para evitar confundirse a usted mismo y a los demás, siempre prefiera las importaciones absolutas. – SingleNegationElimination
@TokenMacGuy: ah, buena captura. De alguna manera me perdí el hecho de que esto era una importación relativa. –