1

aのいくつかのバージョンを含むプロジェクトがあるmain#.pyので、それらを というディレクトリに整理しますrun。私は通常、 を呼び出しaてからプロジェクトを実行します。最上位パッケージを超えたインポートが含まれるため、 in で指定する必要があります。./apython run/main1.pymain1.pysys.path.insert(0, "./")main1.py

からbインポートするプロジェクトを作成しました。から、具体的にインポートするにはどうすればよいですか?main1.pyab\main.pymain1.pya/utils.py

要件:

  1. プロジェクトaは私がずっと前に取り組んでいたプロジェクトなので、そのヘッダーだけに限定的な変更を加えたいと思います。今のようpython run/main1.pyに働きたい。

  2. プロジェクトを異なるコンピューター間で移動する可能性があるため、それ自体main1.pyに対してインポートする必要がutils.pyあります。(つまり、絶対パスでインポートしない)

  3. ソリューションがスケーラブルであることを望みます。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
4

0 に答える 0