Python 3のインポート(私はPython 3.5を使用しています)を理解しようとすると巨大な問題を抱えています。これは百万ドルの質問と思われ、私はそれがどこでも答えられていることを知っています。しかし、私は本当に物事がどのように行われるべきかをよく理解することはできません。インターネット上の回答は大きく異なります。これは、ほぼ重複した回答であれば、事前に申し訳ありません。私は本当に良い読書資料への言及に感謝します。Python3 - 絶対インポートを正しく行い、Pylintを幸せにする方法
/my_project/main.py
/my_project/lib/__init__.py
/my project/lib/my_lib.py
可能であれば、私がしたい:
- は
python3 main.py
として私のプログラムを実行することができ、現在の作業ディレクトリとしてmy_project
を持つは、だから私は、次のようにダミーのプロジェクトを持っています。
PYTHONPATH
は随時変更できません。- pylintを幸せにします。
- 正しいPython3のインポートを使用してください。
main.py
は含まれています
from .lib.my_lib import foo
if __name__ == '__main__':
foo()
そしてfoo
はそれに応じてそのような構成とlib/my_lib.py
で定義されている、私が取得:
SystemError: Parent module '' not loaded, cannot perform relative import
私がすることでエラーを回避することができます次のようなインポート:
from lib.my_lib import foo
しかし、1)これはPython3の絶対インポートではありません。私が試した次の事がmy_project/__init__.py
を追加することであり、このような輸入Unable to import 'lib.my_lib' (import-error)
を::2)Pylintは文句を言い
from my_project.lib.my_lib import foo
この場合pylintが幸せであるが、その後、私はとして実行することはできません:python3 main.py
: ImportError: No module named 'my_project'
私がそれを実行できる唯一の方法は、親ディレクトリからモジュール:python3 -m my_project.main
です。
私の質問です。正しい方法でインポートを行うことは可能ですか?まだそれをpython3 main.py
として実行できるのでしょうか?
ありがとうございます!
'from lib.my_lib import foo' * is is absolute import:現在の作業ディレクトリは自動的に' sys.path'にあり、最初のディレクトリでもあります。 – Evert
もっと正確にするためには、 'sys.path'の最初のエントリは[" "Pythonインタープリタを呼び出すのに使われたスクリプトを含むディレクトリです"](https://docs.python.org/3 /library/sys.html#sys.path)。 – Evert
pylintで問題を再現できません:インポートエラーは発生しません。 – Evert