Sto usando Python 3.5.1. Ho letto il documento e la sezione pacchetto qui: https://docs.python.org/3/tutorial/modules.html#packages__init__.py non è richiesto per i pacchetti in Python 3?
Ora, io ho la seguente struttura:
/home/wujek/Playground/a/b/module.py
module.py
:
class Foo:
def __init__(self):
print('initializing Foo')
Ora, mentre in /home/wujek/Playground
:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Analogamente, ora in casa, superfolder di Playground
:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
In realtà, posso fare tutti i tipi di cose:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Perché fa questo lavoro? Anche se ci dovevano essere i file __init__.py
(quelli vuoti avrebbero funzionato) in entrambi a
e b
per module.py
essere importabili quando il percorso Python punta alla cartella Playground
?
Questo sembra essere cambiato da Python 2.7:
~ $ PYTHONPATH=Playground python
>>> import a
ImportError: No module named a
>>> import a.b
ImportError: No module named a.b
>>> import a.b.module
ImportError: No module named a.b.module
Con __init__.py
sia ~/Playground/a
e ~/Playground/a/b
funziona benissimo.
farò leggere il documento, ma è un po 'lungo. È possibile riassumere rapidamente?Potresti semplicemente dirmi: supporta ancora __init__.py o li ignora completamente? Se li supporta, qual è la differenza di funzionalità e perché questa dualità? – wujek
Sì, funziona ancora. Quindi tutti i pacchetti Python 2 con i file '__init __. Py' funzioneranno in termini di importazioni (altre differenze tra Python 2 e 3 non sono considerate qui). –
Quindi il tutorial dovrebbe essere probabilmente aggiornato. È stato aperto un bug della documentazione? –