2017-08-23 17 views
0

私はいくつかのサブモジュールを持つプログラムを持っています。サブモジュールを独立して使用できるようにしたいので、他のプログラムでもサブモジュールを使用することができます。しかし、サブモジュールには相互依存関係があり、互いの側面を実行する必要があります。これに対処する最も問題の少ない方法は何ですか?各サブモジュールは、その親のgit submoduleあるPythonでサブモジュールの相互依存関係を処理する方法は?

myapp/ 
|-- __init__.py 
|-- app.py 
|-- special_classes 
| |-- __init__.py 
| `-- tools 
|  `-- __init__.py 
|-- special_functions 
| |-- __init__.py 
| `-- tools 
|  `-- __init__.py 
`-- tools 
    |-- __init__.py 
    |-- classes.py 
    `-- functions.py 

は今のところ、私はこのように私のプログラムを構造化しています。

私はそれぞれのサブモジュールを独立して管理し、開発することができ、これらのサブモジュールの1つを新しいプロジェクトに追加するのは、git clonegit submodule addという単純なものです。私は管理された共有コンピューティング環境で働いているため、ユーザー環境管理&のソフトウェアのバージョン管理とインストールが争点となっているため、プログラムを簡単に実行できます。

この例では、3つのサブモジュールがあります。これらのサブモジュールは互いに独立しており、いずれかに変更があるたびに手動で更新する必要があります。サブモジュールの開発を行うのは非常に面倒です。同様に、テストは各サブモジュールで実行され、toolsモジュールのコピーが3つあるため、実行しているユニットテストの数は3倍になりました。

hereなどのさまざまなインポート方法がありますが、これは理想的な解決策ではありません。

正式なPythonパッケージhereを作成する方法を読んだことがありますが、これは大企業のようであり、エンドユーザーが実際にプログラムをインストールして実行するのがはるかに難しくなります。

別の関連する問題は、親で単一のツールを持っており、サブモジュールにインポートするhere

+0

"私はサブモジュールを独立して使用できるようにしたい" - プログラムとは独立して、あるいはお互いに? – jwodder

+0

@jwodder両方。サブモジュールの一部またはすべてを使用するいくつかの他のプログラムもあります。 – user5359531

+0

サブモジュールがお互いに相互依存関係がある場合、相互に独立して使用することはできません。サブモジュールを1つのリポジトリに結合するか、または相互に使用しないように書き直してください。 – jwodder

答えて

1

ベター尋ねました。それは私にとっては最高の気分です。

+0

私はこれを 'sys.path'に親ディレクトリを追加することで試していますが(https://stackoverflow.com/a/11158224/5359531)、他のサブモジュールと同じ名前の問題が発生しています両方の場所で。私がこの方法に固執するかどうかはまだ分かりません。 – user5359531

+0

あなたの提案するファイル構造には、3つのツールがあり、それらは互いに独立しています。特別なクラスと機能であなたのツールの名前を変更することができます。相互依存するサブモジュールを独立したサブモジュールに変換する方法を見つけ出す必要があります。 – Ghostranger

関連する問題