1. ホーム
  2. python

[解決済み] Pythonモジュールの絶対的インポートと明示的相対的インポート

2023-01-08 07:13:26

質問

Pythonアプリケーションでパッケージをインポートするのに適した方法について考えています。私はこのようなパッケージ構造を持っています。

project.app1.models
project.app1.views
project.app2.models

project.app1.views 輸入品 project.app1.modelsproject.app2.models . 思い当たるのは2つの方法です。

絶対インポートを使って

import A.A
import A.B.B

で紹介されているように、明示的な相対インポートを使うこともできます。 Python 2.5 と PEP 328 で導入されました。 :

# explicit relative
from .. import A
from . import B

これを行うための最もpythonicな方法は何ですか?

どのように解決するのですか?

絶対的なインポート。PEP 8より。

パッケージ内のインポートのための相対的なインポートは非常に は推奨されません。 すべてのインポートには、常に絶対パッケージパスを使用してください。 PEP 328 [7]が Python 2.5 で完全に実装された今でさえ、明示的な相対インポートのスタイルは積極的に推奨されません。 そのスタイルである明示的な相対インポートは積極的に推奨されません。 絶対インポートの方が移植性が高く、通常はより読みやすいからです。

明示的な相対インポートは良い言語機能です(と私は思います)が、絶対インポートほど明示的ではありません。より読みやすい形式は

import A.A
import A.B.B

特に、いくつかの異なる名前空間をインポートする場合。パッケージ内からのインポートを含むよく書かれたプロジェクトやチュートリアルを見ると、たいていこのスタイルに従っています。

より明確にするために行ういくつかの余分なキー操作は、将来、他の人 (そしておそらくあなた) があなたの名前空間を理解しようとするときに、多くの時間を節約するでしょう (特に、パッケージ名の一部が変更された 3.x に移行した場合)。