起動パラメーターなどに基づいて、実行時にモジュールを動的にインポートするモジュラー アプリケーションを作成しています。整理するために、次のディレクトリ構造を使用しています。
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 はディレクトリ内だけです)。Layer4Manager
modules/layer4/layer4.py
__init__.py
modules
iptables.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 レベルのディレクトリ構造でどのように機能するかはわかりません。
前もって感謝します!