Pythonで相対インポートをする方法【メンターが回答】
「Pythonで相対インポートしたいです。」という質問にTechAcademyのメンターが回答しています。importのルールも理解しつつ、相対インポートの使い方をぜひ理解しておきましょう。
TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。
※TechAcademyに実際に寄せられた質問に現役エンジニアのメンターが回答しました。
質問に対して現役のエンジニアが回答していくシリーズだね!
今回はどういう質問でしょうか?
今回は、Pythonに関する内容だね!実際に回答してもらった内容を紹介するね!
お願いします!
質問
Pythonのimportについてわからないことがあります。
現在以下のようにしているのですが、fir_1モジュールからfir_2モジュールをimportするにはどうすればよいでしょうか?
└─document
└─test_import
├─dir_1
│ fir_1.py
│ __init__.py
│
└─dir_2
│ fir_2.py
│ __init__.py
│
├─ __init__.py
│
├─ main.py
以下のように相対インポートしたいのですが、
# -*- coding: utf-8 -*- from ..dir_2 import fir_2
次のエラーが出てしまいます。
SystemError: Parent module '' not loaded, cannot perform relative import
今まではpathを追加してからインポートしていたのですが、どうも推奨されてないと書かれていたので、質問させてもらいました。
# -*- coding: utf-8 -*- import sys sys.path.append('../dir_2') import fir_2
メンターからの回答
fir_1モジュールからfir_2モジュールをimportするにはどうすればよいでしょうか?
インポートのルールとして、トップレベルパッケージより上の階層をたどることは残念ながらできません。
したがって、main.pyからからみて、パッケージ階層を一つ深くすればエラーなく実行可能です。
回答してくれたメンター
mentor-takeda 関数型プログラミング言語(HaskellやLispなど)を使用した数値計算システム開発業務に長年従事。 |
回答分かりやすかったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
他にもメンターが回答したPythonでおすすめのIDE(統合開発環境)も合わせてご覧ください。
また、オンラインのプログラミングスクールTechAcademyではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。
初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。
独学に限界を感じている方はぜひご覧ください。