Sto usando Python 3.5.1. Ho letto il documento e la sezione del pacchetto qui: https://docs.python.org/3/tutorial/modules.html#packages
Ora 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>
Allo stesso modo, ora a casa, supercartella 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é funziona? Pensavo che ci fossero dei __init__.pyfile (quelli vuoti avrebbero funzionato) in entrambi ae bper module.pyessere impraticabili quando il percorso di Python punta alla Playgroundcartella?
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__.pyin entrambi ~/Playground/ae ~/Playground/a/bfunziona bene.