web-dev-qa-db-ja.com

インポートステートメントはPyCharmでは機能しますが、ターミナルでは機能しません

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

このフォルダ構造があります

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

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

bar.py:
print("bar")

だから私の期待される出力は

bar
foo

これはPyCharmから実行するとうまく機能します。ただし、ターミナルから実行すると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'

私は この質問 を見つけました、これはほぼ同じ問題です。ただし、PyCharmと同じPythonインタープリターを実際に使用しており、現在somepackage/フォルダーを含むフォルダーにいるため、推奨されるソリューションはどれも私にとっては機能しません。

この問題を解決する方法について他に提案はありますか?よろしくお願いします!

28
Pibborn

スクリプトのようにfoo.pyを実行していますが、実際にはモジュールのように使用しています。したがって、適切な解決策はそれをモジュールとして実行することです:

python3 -m somepackage.foo

記録のために、別の方法は次のようにパスを編集することです:

export PYTHONPATH=.

(または、絶対ディレクトリをそこに配置することもできます。もちろん、PYTHONPATHに既に存在する他のディレクトリを追加する必要があります。)これは、PyCharmが行うことにより近いですが、哲学的には正しくありません。

25
Arthur Tacca