Mi chiedo perché la directory (subpackage) che contiene i sottomoduli in un pacchetto python si presenta come un simbolo quando il pacchetto viene importato. Per esempio, se ho questo pacchetto:pacchetto di importazione python - il pacchetto secondario non deve essere visualizzato nella tabella dei simboli
PyModTest/ Top-level package
__init__.py Initialize the package
Source/ Subpackage holding source files
__init__.py
WildMod.py Submodule containing a function: 'WildFunc'
dove il __init__.py livello superiore assomiglia a questo:
#!/usr/bin/env python
from Source.WildMod import WildFunc
e, per completezza, il livello più basso __init__.py si presenta così :
#!/usr/bin/env python
__all__ = ["WildMod"]
OK, ora apro l'interprete, importare il modulo, e guardare i simboli:
>>> import PyModTest
>>> dir(PyModTest)
['Source', 'WildFunc', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
VEDERE, il modulo 'Origine' si presenta, anche se non l'ho mai importato in modo specifico!
L'unico simbolo (oltre a quelli privati) che voglio vedere è il mio 'WildFunc'. C'è un modo per nascondere il pacchetto 'Source'?
Impressionante, questo ha senso. Grazie per il suggerimento sul 'del Source' :) – rokuingh
'Source' è un sotto pacchetto di' PyModTest', l'importazione implicita viene automaticamente trasformata in 'da PyModTest.Source import ...', e quindi il modulo 'Source' deve essere aggiunto come attributo del modulo 'PyModTest'. Se 'Source' è stato trovato all'esterno del pacchetto' PyModTest' (improbabile, i subpackages hanno la precedenza su 'sys.path'), questo non si sarebbe verificato. Per evitare di confondere te stesso e gli altri, preferisci sempre le importazioni assolute. – SingleNegationElimination
@TokenMacGuy: ah, buona cattura. In qualche modo ho perso il fatto che si trattava di un'importazione relativa. –