Python import : AttributeError: 'module' objet n'a pas d'attribut de 'test'
Je pense que c'est stupide de problème, mais je ne peux pas comprendre pourquoi j'ai le
AttributeError: 'module' object has no attribute 'test'
lors de l'exécution de mon test3.py.
Voici mon arborescence du projet :
.
├── __init__.py
├── test3.py
└── testdir
├── __init__.py
└── test.py
Mon test3.py :
#!/usr/bin/python
import testdir
if __name__ == "__main__":
print(testdir.test.VAR)
Mon test.py :
#!/usr/bin/python
import os
VAR=os.path.abspath(__file__)
J'ai aussi essayé d'importer mes VAR de cette façon :
from testdir.test import VAR
EDIT: Maintenant celui-ci fonctionne grâce à @user2357112 - mais je voudrais quand même savoir comment faire pour importer l'ensemble de la test.py fichier sans from ... import ...
si c'est possible. 🙂
Et j'ai essayé un import ..testdir
faire un par rapport à l'importation, mais j'ai eu un SyntaxError
.
Et si j'essaie import testdir.test
- je obtenir un NameError: name'test' is not defined
.
Comment pourrais-je importer ce fichier? Je suis un peu confus.
EDIT bis :
Je m'en excuse, quand j'ai essayé import testdir.test
, j'ai aussi modifié print(testdir.test.VAR)
à print(test.VAR)
.
Qui était le problème, mon mauvais.
avec :
#!/usr/bin/python
import testdir.test
if __name__ == "__main__":
print(testdir.test.VAR)
Il fonctionne parfaitement, je l'ai bien que l'importation de testdir.test
fait test
exister seul (et pas testdir.test
) dans le champ d'application.
Désolés pour la gêne occasionnée. :S
vAR
capitalisés comme cela dans votre fichier réel?Mon mal, vous avez raison. Maintenant
from testdir.test import VAR
fonctionne, je vous remercie. Mais comment pourrais-je importer le fichier en entier, sans l'aide d'un from ... import ...
?import testdir.test
. L'importation d'un package de ne pas charger automatiquement son submodules.J'ai essayé ceci, mais j'ai eu un NameError.
OriginalL'auteur vmonteco | 2015-06-14
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter
from .test import VAR
à testdir/init.py. Puisimport testdir
dans test3.py pourrait fonctionner. Je suis d'accord, c'est plus une solution de contournement de la solution.print testdir.VAR
Non, il n'est pas "sale" en soi pour mettre des importations dans le fichier init, enfait le nom l'indique, il est pour l'initialisation d'un paquet. Il fournit une sorte d'encapsulation, dans lequel les utilisateurs du paquet n'avez pas besoin de connaître la structure interne et les modules de l'emballage. Cela dit, l'importation de tout dans l'init n'encombre l'espace de noms. Afin de l'utiliser à bon escient.
OriginalL'auteur hspandher
Pour l'ajout de l'ensemble du dossier avec l'aide d'instruction d'importation, vous pouvez utiliser execfile
OriginalL'auteur dmr
J'ai enfin réussi à le faire fonctionner de cette façon :
J'ai tort modifié
print(testdir.test.VAR)
àprint(test.VAR)
quand j'ai essayé avecimport testdir.test
. J'ai donc eu cette NameError.Mon mauvais.
OriginalL'auteur vmonteco