起動パラメーターなどに基づいて、実行時にモジュールを動的にインポートするモジュラー アプリケーションを作成しています。整理するために、次のディレクトリ構造を使用しています。
myapp/
├── __init__.py
├── main.py
├── utils.py
├──modules/
├── __init__.py
├── iptables/
│ ├── __init__.py
│ ├── iptables.py
│ ├── [other files/directories/configuration...]
│ └── tests
│ ├── iptables_tests.py
├── layer4/
│ ├── __init__.py
│ ├── layer4.py
│ ├── [other files/directories/configuration...]
│ └── tests
│ ├── layer4_tests.py
私は次のことを達成しようとしています:
main.py内のクラスで、 のfrom modules.layer4 import Layer4Managerようなことができるはずです。同じディレクトリに他のスクリプト/ファイルがあるため、可能であれば実際のコードを含めずにこれを行いたいので、それらをディレクトリにグループ化することは理にかなっています(これがスクリプトが「 t はディレクトリ内だけです)。Layer4Managermodules/layer4/layer4.py__init__.pymodulesiptables.pyからlayer4.py関数をインポートできるはずutils.pyです。Python unittest フレームワークと Nose を使用したテストは、たとえば、および
iptables_tests.pyを実行できる必要がfrom myapp.modules.iptables import IPTablesControllerありfrom myapp.utils import UtilityFunctionます。
私はこれと数時間戦っていますが、上記の 3 つの項目を同時に動作させることができません。from layer4 import *or__all__変数を内部で使用modules/layer4/__init__.pyすると、テストが中断されfrom myapp.utils import UtilityFunctionます。
ブランキングmodules/*/__init__.pyすると、できなくなりfrom myapp.modules.layer4 import Layer4Managerます。
他のいくつかの組み合わせを試しましたが、事態を悪化させているだけだと思います。私はPython 2.6をターゲットにしています。ある種の相対インポートを使用すると作業が簡単になると思いますが、ここで使用している 2 レベルのディレクトリ構造でどのように機能するかはわかりません。
前もって感謝します!