質問

私は、同じベースパッケージを使用したいサブプロジェクトを扱う正しい/最も簡単な/最もパトンニックな方法について疑問に思っています。現在、このようなファイル構造があります。

trunk\
    proj1\setup.py
          company_name\__init__.py + proj1's code
    proj2\setup.py
          company_name\__init__.py + proj2's code

Namespace Company_nameをすべてのプロジェクトに共通に保ちたいと考えています(これ自体はUnpythonicですか?)が、proj1とproj2が開発モードにインストールされると、最初のインストールされたものが壊れます。それはように見えます import company_name... どのcompany_nameパッケージを調べるかについて混乱し、最初/last/ランダムなものをつかみます。

これは通常、より大きなPythonプロジェクトでどのように処理されますか?何らかのメガエッグを構築するトランクのセットアップでこれを解決することは可能ですか? GoogleやStackに関連する情報が見つからなかったため、リンクだけでも非常に高く評価されています!


編集:ルートフォルダーにsetup.pyを追加してみました

...    
namespace_packages = ['company_name'],
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']}
...

適切に pkg_resources.declare_namespace(__name__) の中に __init_.py ファイル、しかし ./setup.py bdist_egg ただ与える:

company_nameセットアップコマンドのエラー:分布には、名前空間パッケージのモジュールまたはパッケージが含まれていません 'company_name'

役に立ちましたか?

解決

ソリューションのパイソン性を保証することはできませんが、ついにさまざまなアプリケーションが一緒に実行されていることを確認しました。私は名前空間パッケージで正しい軌道に乗っていましたが、トランクに1つのスーパープロジェクトを用意しようとする代わりに、 namespace_packages 個々のプロジェクトのセットアップのライン。これにより、一緒にインストールされたときに適切に動作が発生し、 company_name 意図した名前空間。

これが合理的なPythonソリューションであることにかかわらず、チャイムをかきたい人は誰でも、これが「それが行われた方法」であるかどうかを聞いています。それは正しいと感じていますが、それは私がより慣れているJavaスタイルを模倣しているからかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top