a
のいくつかのバージョンを含むプロジェクトがあるmain#.py
ので、それらを というディレクトリに整理しますrun
。私は通常、 を呼び出しa
てからプロジェクトを実行します。最上位パッケージを超えたインポートが含まれるため、 in で指定する必要があります。./a
python run/main1.py
main1.py
sys.path.insert(0, "./")
main1.py
からb
インポートするプロジェクトを作成しました。から、具体的にインポートするにはどうすればよいですか?main1.py
a
b\main.py
main1.py
a/utils.py
要件:
プロジェクト
a
は私がずっと前に取り組んでいたプロジェクトなので、そのヘッダーだけに限定的な変更を加えたいと思います。今のようpython run/main1.py
に働きたい。プロジェクトを異なるコンピューター間で移動する可能性があるため、それ自体
main1.py
に対してインポートする必要がutils.py
あります。(つまり、絶対パスでインポートしない)ソリューションがスケーラブルであることを望みます。
b
のような構造の他のいくつかのプロジェクトからモジュールをインポートする必要がありますa
。システムの PATH 変数を拡張すると、問題が発生する可能性があると思います。もっときちんとした解決策はありますか?
私のプロジェクトのファイルは次のとおりです。
- a
- 走る
- main1.py
- ユーティリティ.py
- 走る
- b
- main.py
- ユーティリティ.py
でa/run/main1.py
:
import sys
sys.path.insert(0, "./")
from utils import hello # Anyway to specify this to be ../utils.py ?
hello()
でa/utils.py
:
def hello():
print('hello from a')
でb/main.py
:
import sys
sys.path.append("../")
from a.run import main1
import utils
utils.hello()
でb/utils.py
:
def hello():
print('hello from b')
これが現在の結果です。最初の行に「hello from a」を出力したいと思います。
>>> python run/main1.py:
hello from a
>>> cd ../b
>>> python run/main.py:
hello from b (we want this to be "hello from a")
hello from b