9

同じ基本パッケージを使用して、サブプロジェクトを処理するための正しい/最も簡単な/最もpythonicな方法について疑問に思っています。現在、次のようなファイル構造があります。

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

名前空間company_nameをすべてのプロジェクトに共通に保ちたいのですが(おそらくこれ自体は非pythonicですか?)、proj1とproj2が開発モードでインストールされると、最初にインストールされたものが壊れます。import company_name...どのcompany_nameパッケージを調べるか混乱しているようで、最初/最後/ランダムなパッケージを取得します。

これは通常、より大きなPythonプロジェクトでどのように処理されますか?ある種のメガエッグを構築するトランクのsetup.pyでこれを解決することは可能ですか?グーグルやスタックで関連情報を見つけられなかったので、リンクだけでもどんな情報でも大歓迎です!


編集:ルートフォルダに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'のモジュールまたはパッケージが含まれていません

4

1 に答える 1

7

私のソリューションのPython性を保証することはできませんが、最終的にさまざまなアプリケーションを一緒に実行することができました。私は名前空間パッケージで正しい方向に進んでいましたが、トランクに1つのスーパープロジェクトを含める代わりに、namespace_packages個々のプロジェクトのsetup.pyに行を追加しました。company_nameこれにより、一緒にインストールすると、意図したとおりに名前空間が共有され、適切に動作するようになりました。

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

于 2010-08-27T17:35:10.387 に答える