Par rapport aux importations - ModuleNotFoundError: No module named x
C'est la première fois que j'ai vraiment assis et j'ai essayé de python 3, et semblent être en train d'échouer lamentablement. J'ai les deux fichiers suivants:
- test.py
- config.py
config.py a quelques fonctions qui y sont définis ainsi qu'un peu de variables. J'ai dépouillé les suivantes:
Cependant, j'obtiens l'erreur suivante:
ModuleNotFoundError: No module named 'config'
Je suis conscient que le py3 convention est d'utiliser absolue des importations:
from . import config
Cependant, cela conduit à l'erreur suivante:
ImportError: cannot import name 'config'
Donc, je suis à une perte quant à ce qu'à faire ici... Toute aide est grandement appréciée. 🙂
- Je ne peux pas reproduire l'erreur, comment voulez-vous exécuter ce code?
- - Je exécuter des
test.py
par pyCharm avec Python 3.6. Ne vôtre exécution fine? - Je l'exécuter avec d'inactivité qui viennent avec python, et aussi comme
python test.py
, et il fonctionne parfaitement bien. Je n'ai pas de pyCharm, mais peut-être une mauvaise configuration de pyCharm qui est à l'origine du problème - Très bizarre. Je suis en utilisant WinPython - il suffit de télécharger la vanille Python 3.6 à partir de python.org et il fonctionne très bien. Jamais pensé à vérifier l'interprète! Merci!
- Ma conjecture est que quelque chose de funky qui se passe avec PYTHONPATH. Vérifiez vos paramètres IDE et/ou les variables d'environnement système.
- J'ai ce même problème exact. Il n'est pas pycharm! Il est python3. Il fonctionne en python2, mais lors de l'utilisation de python3, vous voyez cette erreur! très frustrant.
- sys.chemin d'accès.append(r'C:/.../LastFolder') fonctionne tout le temps
Vous devez vous connecter pour publier un commentaire.
TL;DR: vous ne pouvez pas le faire par rapport des importations à partir du fichier que vous exécuter depuis
__main__
module n'est pas une partie d'un package.Absolue des importations - importer quelque chose de disponible sur
sys.path
Relative des importations - importer quelque chose par rapport à ce module, doit être une partie d'un paquet
Si vous utilisez les deux variantes exactement de la même manière, l'un d'eux devrait fonctionner. De toute façon, voici un exemple qui devrait vous aider à comprendre ce qu'il se passe, nous allons ajouter un autre
main.py
fichier avec l'ensemble de la structure de répertoire comme ceci:Et laissez la mise à jour de test.py pour voir ce qu'il se passe:
Passons à l'exécution de test.py première:
Ici "test" est la
__main__
module et ne sait rien sur le sentiment d'appartenance à un package. Cependantimport config
devrait fonctionner, depuis leryan
dossier sera ajouté à sys.chemin d'accès.Passons à l'exécution de main.py au lieu de cela:
Et ici test est à l'intérieur de la "ryan" package et peut effectuer relative des importations.
import config
échoue depuis implicite relative des importations ne sont pas autorisés dans Python 3.Espère que cela a aidé.
P. S.: si vous êtes collant avec Python 3 il n'est plus nécessaire dans
__init__.py
fichiers.sys.path.append('/some/path/my_module')
à l'intérieur de/some/path/my_module/__init__.py
?sys.path
au cours de l'exécution (github.com/...). Vous pouvez également définir la variable d'environnement PYTHONPATH.__init__.py
de fichiers". Intéressant. Pouvez-vous expliquer cela? J'étais sous l'impression que le paquet mécanisme de résolution n'a pas changé tant que ça entre 2 et 3.__init__.py
de fichiers". a l'Inverse, pouvez-vous décrire les choses si nous voulons un paquet de travailler dans les deux 2 et 3? Et de voir le tristement-out-of-date 2009 qu'est-Ce que__init__.py
pour? et de ses plus hautement upvoted réponse "C'est une partie d'un package". Nous avons besoin de commencer en soulignant la distinction "forfait de base [de l'ancien, pré-3.3]" et "espace de noms de package [3.3+]" partout et souvent.J'ai tout compris. Très frustrant, surtout venant de python2.
Vous devez ajouter un
.
pour le module, indépendamment de si oui ou non il est relatif ou absolu.J'ai créé le répertoire d'installation comme suit.
modx.py
mody.py
main.py
quand j'execute principal, c'est ce qui arrive
J'ai couru 2to3 et le centre de sortie était ce
J'ai dû modifier mody.py s'instruction import pour fixer
Ensuite, j'ai couru main.py de nouveau et a obtenu le résultat attendu
Enfin, juste pour le nettoyer et de le rendre portable entre 2 et 3.
Réglage PYTHONPATH peut également aider avec ce problème.
Ici est de savoir comment il peut être fait sur Windows
set PYTHONPATH=.
Essayé votre exemple
Cela fonctionne pour moi:
Testé avec Python:3.4.2 - PyCharm 2016.3.2
À côté de cette PyCharm vous propose de Importation de ce nom.
Vous vha de cliquer sur
config
et un icône d'aide s'affiche.Vous pouvez simplement ajouter le fichier suivant dans votre répertoire tests, puis python va l'exécuter avant que les tests
Cet exemple fonctionne sur Python 3.6.
Je suggère d'aller à
Run -> Edit Configurations
dans PyCharm, suppression de toutes les entrées, et en essayant de lancer le code par le biais de PyCharm de nouveau.Si cela ne fonctionne pas, vérifiez que votre projet interprète (Paramètres -> Projet Interprète) et exécutez la configuration par défaut (Exécuter -> Modifier les Configurations...).
Comme cela a été dit dans les commentaires du post original, ce qui semblait être un problème avec l'interpréteur python que j'utilisais pour quelque raison que ce soit, et pas quelque chose de mal avec les scripts python. Je suis passé de la WinPython bundle officielle de python 3.6 à partir de python.org et il a très bien fonctionné. merci pour l'aide tout le monde 🙂
Déclarer corriger sys.chemin liste avant d'appeler le module: