2017-08-15 7 views
0

私のプロジェクトにgitサブモジュールを追加しました。インポートの完全なパスを使用する必要があるため、そのサブモジュール内のすべてのインポートが壊れています。例えば 、構造は次のようである場合:レベル2のパッケージをインポートするPython

MYPROJECT:
- submodule_project:
- パッケージ1:
---
code1.py - パッケージ2:
--- code2.pyを

今、code1.pyにはfrom package2 import code2があります。これは、package2が未解決の参照であることを私に伝えます。私がfrom submodule_project.package2 import code2に変更した場合のみ解決されます。
私はサブモジュール内の何かを変更したくないので、これは望ましくありません。私はちょうど私のプロジェクトでいくつかのパッケージを使い、開発者がそれを更新するたびに定期的に更新するように追加しました。

答えて

0

package2をトップレベルのインポート可能なパッケージにしたい場合、その親ディレクトリ(あなたの場合はsubmodule_project)はsys.pathになければなりません。それを行うには多くの方法があります:sys.path.append()sys.path.insert()PYTHONPATH環境変数です。

また、コードをサブモジュールとして使用したくない場合もあります。サブモジュール内のコードが相対(from ..package2 import code2)の代わりに絶対インポートを使用する場合、サブモジュールを持つことは意味がありません。パッケージはsite-packages(グローバルまたは仮想環境)にインストールする必要がありますが、サブモジュールとしてプロジェクトには添付しないでください。

関連する問題