(Pythonの相対インポートに関連するStackOverflowには多くの質問があることに気づきました。これはすべて間違っているのではないかと思いますが、とにかくここに行きます..)
次のように編成されたpythonプロジェクト(mysubmod)があります。
/__init__.py
/lib
- /__init__py
- /foobar.py
/models
- /__init__.py
- /hello.py
重要:
- /models/hello.py は lib.foobar をインポートします
- /models/hello.py には、いくつかのテストを実行するメインブロックがあります。
次に、mysubmod を git サブモジュールとしてインポートした 2 番目のプロジェクト (myproj) を作成します。myproj は次のように編成されました -
/mysubmod
/scripts
- /__init__.py
- /__test.py
どこ:
- scripts/test.py インポート mysubmod.models.hello
しかし、コマンド ラインから /scripts/test.py を実行すると、インタープリターは mysubmod/models/hello.py が lib.foobar を見つけられなくなったと不平を言うようになりました。
リロードします。
mysubmod/models/hello.py を変更して、..lib.foobar をインポートするようにしました
/scripts/test.py を問題なく実行できるようになりましたが、サブモッド スクリプトをコマンド ラインからファイルとして実行することはできなくなりました。python -m オプションを使用してモジュールとしてのみ実行できます。
また、インタープリターが「トップレベル パッケージを超えた相対インポートを試行しました」と不平を言うため、-m オプションを使用しても、サブモッド プロジェクト ファイルをスタンドアロン ベースで実行できなくなりました。つまり、実際には mysubmod を myproj ルート (ルート レベル ディレクトリとして mysubmod がある場所) からしか実行できません。
これはすべてかなり不十分なようです。私はできるようにしたい:
- git submodule を使用して mysubmod を myproj にインポートし、「正常に機能する」ようにします
- スタンドアロンベースで mysubmod を引き続き開発できます (つまり、モジュールではなくファイルとしてスクリプトを実行します)。
これを行う方法について誰か意見がありますか?git submodule と python に関するベストプラクティスについて何か意見はありますか?
ありがとう。