社内で開発中の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 に依存するのは当然です。