私はこのような構造にしたいプロジェクトがあります:
myproject
__init__.py
api
__init__.py
api.py
backend
__init__.py
backend.py
models
__init__.py
some_model.py
ここで、api.pyとbackend.pyの両方にモジュールsome_model.pyをインポートします。これを適切に行うにはどうすればよいですか?私は試した
from models import some_model
しかし、「ModuleNotFoundError:No model named 'models'」で失敗します。私も試しました
from ..models import some_model
その後、「ValueError:最上位パッケージを超えて相対インポートを試行しました」と表示されました。ここで何が間違っていますか?サブディレクトリではない別のディレクトリからファイルをインポートするにはどうすればよいですか?
まず、このimportステートメントのステートメント:
from models import some_model
名前空間を設定する必要があります:
# in myproject/backend/backend.py or myproject/api/api.py
from myproject.models import some_model
次に、myproject
を含むディレクトリを取得する必要があります。この/path/to/parent
をsys.path
リストに呼び出します。環境変数を設定することにより、これを一時的に行うことができます。
export PYTHONPATH=/path/to/parent
または、できれば、setup.py
ファイルを記述してパッケージをインストールすることでそれを行うことができます。 PyPA パッケージガイドに従ってください。同じディレクトリ内からsetup.py
ファイルを作成したら、これを実行してsys.path
の正しいエントリを設定します。
pip install --editable .
残念ながら、Pythonは、ファイルがシステムパスにある場合にのみファイルを検索します。
Pythonのsys
モジュールを使用して、Pythonの実行中にパスにディレクトリを追加し、一度Pythonの実行が停止すると、パスから削除します。
これを行うには:
import sys
sys.path.insert(0, '/path/to/application/app/folder')
import [file]
ただし、ファイルをインポートする前にsysをインポートし、ディレクトリパスを設定することが重要です。
幸運を!
ヨルダン。