Python-import は上位ディレクトリ ファイルをインポートします

次のディレクトリ構造があるとします。

-- dir0
  | file1.py
  | file2.py
  | dir3
   | file3.py
  | dir4
   | file4.py

dir0 フォルダの下に file1.py と file2.py の 2 つのファイルと、dir3 と dir4 の 2 つのサブフォルダがあり、dir3 に file3.py ファイルがあり、dir4 に file4.py ファイルがあります。

1. 同レベルのモジュールをインポートする

Python はモジュールを同じレベル (同じフォルダー内の py ファイル) でインポートし、それらを直接インポートします。

import xxx

file1.py に file2.py をインポートする場合は、接尾辞「.py」を追加する必要がないことに注意してください。

import file2
# 使用file2中函数时需加上前缀"file2.",即:
# file2.fuction_name()

2. 下位モジュールをインポートする

下位ディレクトリ モジュールをインポートするのも非常に簡単です.下位ディレクトリに空の __init__.py ファイルを作成してからインポートする必要があります.

from dirname import xxx

file1.py の dir3 の下に file3.py をインポートする場合は、最初にdir3 に空の__init__.pyファイルを作成する必要があります。

-- dir0
  | file1.py
  | file2.py
  | dir3
   | __init__.py
   | file3.py
  | dir4
   | file4.py

次に、次のステートメントを使用します。

# plan A
from dir3 import file3

または:

# plan B
import dir3.file3
# import dir3.file3 as df3

ただし、2番目の方法を使用すると、常にパスdir3で記述する必要があり、より面倒です. 別のエイリアスを使用することをお勧めします.

3. 親モジュールをインポートする

親ディレクトリの下にモジュールをインポートするには、sys.path を使用できます。  

import sys 
sys.path.append("..") 
import xxx 

たとえば、file4.py で、インポートの上位ディレクトリにある file1.py をインポートする場合:

import sys 
sys.path.append("..") 
import file1

sys.path の役割: import ステートメントを使用してモジュールをインポートする場合、インタープリターは現在のモジュールが配置されているディレクトリと sys.path で指定されたパスを検索して、インポートする必要があるモジュールを見つけます。 sys.path に直接上位ディレクトリを追加します。

「..」の意味: Linux の「..」に相当し、現在の作業ディレクトリの親ディレクトリを示します。実際、Python の '.' も Linux のそれと一致しており、現在のディレクトリを示しています。

4. 次のフォルダーにモジュールをインポートします。

たとえば、file4.py では、file3.py を dir3 ディレクトリにインポートします。

これは実際には前の 2 つの操作を組み合わせたもので、基本的には上位ディレクトリを sys.path に追加し、下位ディレクトリ モジュールと同じ方法でインポートするという考え方です。

引用されたフォルダー、つまり dir3 の下の空の __init__.py ファイルも必要です。

-- dir
  | file1.py
  | file2.py
  | dir3
   | __init__.py
   | file3.py
  | dir4
   | file4.py

同時に、親ディレクトリを sys.path に追加します。

import sys
sys.path.append("..")
from dir3 import file3

5. よくある間違いとインポートの原則

親ディレクトリからモジュールを直接インポートする操作を使用する場合:

from .. import xxx

多くの場合、エラーが報告されます。

ValueError: attempted relative import beyond top-level package

これは、相対インポート中に、フォルダーが基本的にパッケージ、つまりパッケージの役割として機能するためです (たとえば、一般的に使用される numpy と pandas は両方ともパッケージです)。Python インタープリターがフォルダーがパッケージであることに同意しない場合、これは通常のフォルダーであり、相対インポートは実装できません。

パッケージとしてのフォルダーは、次の 2 つの条件を満たす必要があります。

  1. __init__.py ファイルはフォルダーに存在する必要があり、空にすることができます。

  1. このフォルダー内の py ファイルは、最上位モジュールとして実行できません。

おすすめ

転載: blog.csdn.net/m0_58086930/article/details/128699867