web-dev-qa-db-fra.com

La déclaration d'importation fonctionne sur PyCharm mais pas depuis le terminal

Pycharm 2016.2.3, Mac OS X 10.11.1, Python 3.5 (Homebrew);

J'ai cette structure de dossiers

project
  /somepackage
    /subpackage
     __init__.py   
     bar.py
   __init__.py
   foo.py

foo.py:
import somepackage.subpackage.bar
print("foo")

bar.py:
print("bar")

Donc, ma sortie attendue est

bar
foo

Cela fonctionne bien lorsqu'il est exécuté à partir de PyCharm. Cependant, lorsque je l'exécute à partir de mon terminal, j'obtiens une ImportError:

$ pwd
$ /home/project (not the actual path; just omitting some personal stuff)
$ python3.5 somepackage/foo.py
File "foo.py", line 1, in <module>
import somepackage.subpackage.bar
ImportError: No module named 'somepackage'

J'ai trouvé cette question , qui est à peu près le même problème. Cependant, aucune des solutions suggérées ne fonctionne pour moi, car j'utilise en effet le même interpréteur Python que PyCharm et je suis actuellement dans le dossier qui contient le somepackage/ dossier.

Quelqu'un a-t-il d'autres suggestions sur la façon de résoudre ce problème? Merci de bien vouloir!

28
Pibborn

Vous exécutez foo.py comme un script, mais vous l'utilisez vraiment comme un module. La bonne solution consiste donc à l'exécuter en tant que module:

python3 -m somepackage.foo

Pour mémoire, une autre alternative est d'éditer votre chemin comme:

export PYTHONPATH=.

(Ou vous pouvez y mettre le répertoire absolu, et bien sûr, vous devez ajouter tous les autres répertoires qui sont déjà dans votre PYTHONPATH.) C'est plus proche de ce que fait PyCharm, mais c'est moins philosophiquement correct.

25
Arthur Tacca