J'ai trouvé la solution. Très frustrant, surtout venant de python2.
Vous devez ajouter un .
au module, qu'il soit relatif ou absolu.
J'ai créé la configuration du répertoire comme suit.
/main.py
--/lib
--/__init__.py
--/mody.py
--/modx.py
modx.py
def does_something():
return "I gave you this string."
mody.py
from modx import does_something
def loaded():
string = does_something()
print(string)
main.py
from lib import mody
mody.loaded()
lorsque j'exécute main, voici ce qui se passe
$ python main.py
Traceback (most recent call last):
File "main.py", line 2, in <module>
from lib import mody
File "/mnt/c/Users/Austin/Dropbox/Source/Python/virtualenviron/mock/package/lib/mody.py", line 1, in <module>
from modx import does_something
ImportError: No module named 'modx'
J'ai lancé 2to3, et la sortie principale était la suivante .
RefactoringTool: Refactored lib/mody.py
--- lib/mody.py (original)
+++ lib/mody.py (refactored)
@@ -1,4 +1,4 @@
-from modx import does_something
+from .modx import does_something
def loaded():
string = does_something()
RefactoringTool: Files that need to be modified:
RefactoringTool: lib/modx.py
RefactoringTool: lib/mody.py
J'ai dû modifier l'instruction d'importation de mody.py pour le corriger.
try:
from modx import does_something
except ImportError:
from .modx import does_something
def loaded():
string = does_something()
print(string)
Puis j'ai relancé main.py et j'ai obtenu le résultat attendu
$ python main.py
I gave you this string.
Enfin, juste pour le nettoyer et le rendre portable entre 2 et 3.
from __future__ import absolute_import
from .modx import does_something
1 votes
Je ne peux pas reproduire l'erreur, comment exécutez-vous ce code ?
0 votes
J'exécute
test.py
via pyCharm avec Python 3.6. Le vôtre s'exécute-t-il correctement ?2 votes
Je l'exécute avec idle qui vient avec python, et aussi comme
python test.py
et cela fonctionne parfaitement bien. Je n'ai pas pyCharm, mais peut-être est-ce une mauvaise configuration de pyCharm qui cause le problème.1 votes
Très étrange. J'utilise WinPython - j'ai juste téléchargé Python vanille 3.6 depuis python.org, et ça marche bien. Je n'ai jamais pensé à vérifier l'interpréteur ! Merci !
1 votes
Je pense qu'il se passe quelque chose de bizarre avec PYTHONPATH. Vérifiez les paramètres de votre IDE et/ou les variables d'environnement du système.
2 votes
J'ai exactement le même problème. Ce n'est pas pycharm ! C'est python3. Cela fonctionne dans python2, mais quand on utilise python3, on voit cette erreur ! très frustrant.
0 votes
Sys.path.append(r'C:/.../LastFolder') fonctionne tout le temps