1

社内で開発中のpythonライブラリをいろいろなグループに再構築しています。最上位のモジュールの名前空間を汚染しないようにするために、最上位の「companyname」パッケージの下にすべてをグループ化したいので、「coname.utils」、「coname.qa」、「coname.api」などを作成します。 . これらのいくつかは、製品と共に配布されるか、パブリックにインストール可能になる予定です。「qa」は純粋に内部になります。

Google も同様のことを行っています。たとえば、protobuf ライブラリは、モジュール パスで「google.protobuf」として利用できます。ただし、特にきれいというわけではありません。protobuf パッケージによってインストールされる .pth ファイルは次のようになります。

import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('google',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('google', types.ModuleType('google'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)

「google」ディレクトリに __init__.py がないため、インポートエンジンをだますためだと思います。しかし...エレガントではありません。

これを達成するための確立された方法はありますか?そこに __init__.py を取得するためだけに、「coname-*」パッケージのいずれかに「coname-top」パッケージが必要になるようにしてもかまいません。setuptools がパッケージをモジュール ツリーの最上位にないものとして扱うように説得する方法や、1 つのツリーからサブパッケージを作成できるかどうかは、まだわかりません。

明確にするために、たとえば、coname-qaをconame-apiとは別に配布およびインストールできるように、上記を設定する方法を具体的に尋ねています。どちらも coname-tools に依存するのは当然です。

4

2 に答える 2