J'utilise Python 3.5.1. J'ai lu le document et la section sur les paquets ici : https://docs.python.org/3/tutorial/modules.html#packages
Maintenant, j'ai la structure suivante :
/home/wujek/Playground/a/b/module.py
module.py
:
class Foo:
def __init__(self):
print('initializing Foo')
Maintenant, alors que dans /home/wujek/Playground
:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
De même, maintenant à la maison, superfolder de Playground
:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
En fait, je peux faire toutes sortes de choses :
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Pourquoi cela fonctionne-t-il ? Je pensais qu'il devait y avoir __init__.py
(des fichiers vides fonctionneraient) dans les deux a
y b
para module.py
pour être importable lorsque le chemin d'accès Python pointe vers le fichier Playground
dossier ?
Cela semble avoir changé depuis 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
Avec __init__.py
dans les deux ~/Playground/a
y ~/Playground/a/b
cela fonctionne bien.