Mon python ne peut trouver aucun module dans le même répertoire. Qu'est-ce que je fais mal? (python2.7)
J'ai donc un répertoire '2014_07_13_test', avec deux fichiers:
- test.py
- bonjour.py
où bonjour.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
def hello1():
print 'HelloWorld!'
et test.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
from hello import hello1
hello1()
Python me donne toujours
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 4, in <module>
ImportError: No module named hello
Qu'est-ce qui ne va pas?
import sys; sys.path
>>> import test
Réponses:
Votre code est bon, je soupçonne que votre problème est de savoir comment vous le lancez.
Vous devez lancer python à partir de votre répertoire '2014_07_13_test'.
Ouvrez une invite de commande et «cd» dans votre répertoire «2014_07_13_test».
Par exemple:
$ cd /path/to/2014_07_13_test $ python test.py
Si vous ne pouvez pas «cd» dans le répertoire comme celui-ci, vous pouvez l'ajouter à sys.path
Dans test.py:
import sys, os sys.path.append('/path/to/2014_07_13_test')
Ou définir / modifier le PYTHONPATH
Et tout devrait aller bien ...
... eh bien il y a une légère erreur avec vos lignes 'shebang' (la première ligne de vos deux fichiers), il ne devrait pas y avoir d'espace entre le '#' et le '!'
Il y a un meilleur shebang que vous devriez utiliser.
De plus, vous n'avez pas besoin de la ligne shebang sur chaque fichier ... seulement ceux que vous avez l'intention d'exécuter depuis votre shell en tant que fichiers exécutables.
la source
Modifiez votre importation dans test.py en:
from .hello import hello1
la source
from . import hello
from . import local_module
J'ai eu un problème similaire, je l'ai résolu en ajoutant explicitement le répertoire du fichier à la liste des chemins:
import os import sys file_dir = os.path.dirname(__file__) sys.path.append(file_dir)
Après cela, je n'ai eu aucun problème à importer à partir du même répertoire.
la source
Voici la solution générique que j'utilise. Cela résout le problème d'importation à partir de modules dans le même dossier:
import os.path import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
Mettez ceci en haut du module qui donne l'erreur "Aucun module nommé xxxx"
la source
Dans mon cas, Python n'a pas pu le trouver car j'avais mis le code dans un module avec des tirets, par exemple
my-module
. Quand je l'ai changé, celamy_module
a fonctionné.la source
J'ai rencontré ce problème. J'avais trois dossiers dans le même répertoire, je devais donc spécifier quel dossier. Ex: depuis le script d'importation de dossier
la source
Ce qui suit ne résout pas le problème du PO, mais le titre et l'erreur sont exactement ce à quoi j'ai été confronté.
Si votre projet contient un
setup.py
script, vous pouvez installer le package dans lequel vous vous trouvez, avecpython3 -m pip install -e .
oupython3 setup.py install
oupython3 setup.py develop
, et ce package sera installé, mais toujours modifiable (les modifications du code seront donc visibles lors de l'importation du package). S'il n'en a passetup.py
, donnez-lui un sens .Quoi qu'il en soit, le problème auquel OP est confronté ne semble plus exister?
fichier
one.py
:def function(): print("output")
fichier
two.py
:#!/usr/bin/env python3 import one one.function()
chmod +x two.py # To allow execution of the python file ./two.py # Only works if you have a python shebang Command line output: output
D'autres solutions semblent `` sales ''
Dans le cas d'OP avec 2 fichiers de test, les modifier pour qu'ils fonctionnent est probablement très bien. Cependant, dans d'autres scénarios réels, les méthodes énumérées dans les autres réponses ne sont probablement pas recommandées. Ils vous obligent à modifier le code python ou à restreindre votre flexibilité (exécuter le fichier python à partir d'un répertoire spécifique) et introduisent généralement des ennuis. Et si vous venez de cloner un projet et que cela se produit? Cela fonctionne probablement déjà pour d'autres personnes et il n'est pas nécessaire d'apporter des modifications au code. La réponse choisie veut également que les gens exécutent un script à partir d'un dossier spécifique pour le faire fonctionner. Cela peut être une source de désagrément à long terme, ce qui n'est jamais bon. Il suggère également d'ajouter votre dossier python spécifique à PATH (peut être fait via python ou en ligne de commande). Encore une fois, que se passe-t-il si vous renommez ou déplacez le dossier dans quelques mois? Vous devez à nouveau rechercher cette page, et finalement découvrez que vous devez définir le chemin (et que vous l'avez fait exactement il y a quelques mois), et que vous devez simplement mettre à jour un chemin (vous pouvez certainement utiliser sys.path et le définir par programme, mais cela peut encore être irrégulier ). De nombreuses sources de grande gêne.
la source
Si vous êtes sûr que tous les modules, fichiers que vous essayez d'importer sont dans le même dossier et qu'ils doivent être sélectionnés directement en donnant simplement le nom et non le chemin de référence, alors votre éditeur ou terminal doit avoir ouvert le dossier principal où tous les fichiers / modules sont présents.
Soit, essayez d'exécuter à partir du terminal, assurez-vous d'abord d'aller dans le bon répertoire.
CD
path to the root folder where all the modules are
python
script.py
Ou si vous exécutez [F5] à partir de l'éditeur, c'est-à-dire VsCode, ouvrez le dossier complet et non les fichiers individuels.
la source