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からからみて、パッケージ階層を一つ深くすればエラーなく実行可能です。

 

[PR] Pythonで挫折しない学習方法を動画で公開中

回答してくれたメンター

mentor-takeda

関数型プログラミング言語(HaskellやLispなど)を使用した数値計算システム開発業務に長年従事。

 

大石ゆかり

回答分かりやすかったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

他にもメンターが回答したPythonでおすすめのIDE(統合開発環境)も合わせてご覧ください。

また、オンラインのプログラミングスクールTechAcademyではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

独学に限界を感じている方はぜひご覧ください。

:)