\

Pythonでは、同階層や下位階層に存在するファイルからモジュールを読み込むことが基本です。しかし、上位階層にあるモジュールを普通に読み込もうとするとエラーになります。この記事では、上位階層のモジュールをインポートする方法について説明します。

エラーの原因

スクリプト自身が存在する階層を、最上位のルート階層としてそれぞれ解釈するという挙動が原因です。つまり、上位階層にあるモジュールをインポートしようとすると、「Attempted relative import beyond top-level package」というエラーが出力されます。

解決方法

方法1: __init__.pyを使用する

各階層がパッケージ化されていれば上位階層でもモジュールを読み込むことができます。階層をパッケージ化するためには、各階層に__init__.pyという名前の空ファイルを置くことで可能です。

方法2: sys.pathを設定する

sys.pathに上位階層の絶対パスを追加することで、上位階層のモジュールをインポートすることができます。

import sys
import pathlib

# ひとつ上の階層の絶対パスを取得
parent_dir = str(pathlib.Path(__file__).parent.parent.resolve())

# モジュール検索パスに,ひとつ上の階層の絶対パスを追加
sys.path.append(parent_dir)

これらの方法を用いることで、Pythonで上位階層のモジュールをインポートすることが可能になります。ただし、モジュールの配置は基本的に同階層か下層にすることが推奨されています。: https://qiita.com/Anaakikutsushit/items/f469e6883ee066c66f49 : https://qiita.com/hacchi_/items/8d9ac9f2f918950663df

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です