2017-07-30 4 views
1

Je suis nouveau en Python et j'essaie de comprendre comment fonctionnent les paquets et les instructions d'importation. J'ai fait ce paquet, situé dans mon bureau:Importer des paquets en Python, erreur d'attribut

package/ 
    __ init __.py 
    module2.py 
    subpackage1/ 
     __ init __.py 
     module1.py 

Voici ce qui est à l'intérieur __ initialisation __ .py dans le dossier du package:

__ all __ =["module2"] 
import os 
os.chdir("C:/Users/Leo--/Desktop/Package") 
import subpackage1.module1 
os.chdir("C:/Users/Leo--/Desktop") 

et à l'intérieur __ initialisation __ .py dans le dossier subpackage1:

__ all __ =["module1"] 

Je veux importer module1.py et module2.py que par écrit

import package 

Après avoir tapé la commande ci-dessus dans l'interpréteur je peux accéder sans problème une fonction de module1.py en écrivant

package.subpackage1.module1.mod1() 

où MOD1() est une fonction définie dans module1.py. Mais quand je tape

package.module2.mod2() 

Je reçois "AttributeError: module 'package' n'a pas d'attribut 'module2'" (mod2() est une fonction définie dans module2.py). Pourquoi est-ce? Merci d'avance!

Répondre

0

Vous obtenez le AttributeError car vous n'avez pas importé le fichier module2 dans __init__.py.

Vous ne devriez pas faire os.chdir() dans __init__.py pour importer des sous-modules.

Voici comment je le ferais.

__ init __.py dans le répertoire du package.

from . import module2 
from . import subpackage 

__ __.py init répertoire de package.

from . import module1 
+0

Merci, mais alors quel est le but de permettre la commande "importer un paquetage" s'il ne fait rien? (en supposant __ init __ .py vide) –

+0

@LeonardoMutti Je n'ai pas compris. Ce que vous voulez dire? –

+0

Considérons la structure de paquetage mentionnée ci-dessus, et disons que __ init __ .py est un fichier vide. Si je tape "import package", quel est l'effet de la commande? –