[Python-ml-jp 4902] 親子関係のある動的ライブラリを階層的に読み込む良い実現方法?
python snow
snowpython @ gmail.com
2010年 1月 7日 (木) 16:44:23 JST
kishiです。
親子関係も存在するライブラリを、
動的に読み込む良い方法を探っていますが、
意見や知恵を頂ければと思っております。
何方か、是非御教授願います。
又、質問の場の誤りや、最適な質問の場の指南、が御座いましたら、ご指摘、ご指南をお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
動的に読み込むライブラリ達は、
ある指定されたディレクトリに全て配置するのですが、
基底クラスと派生クラスは、
別々なライブラリ(別々なファイル)になっており、
先に基底クラスのライブラリを読み込みすればいいのですが、
もし、
派生クラスを先に読み込みした場合、
その派生クラスのライブラリに記載してあるimportを先に読み込む、
様な事を何か簡単に出来る方法はあるのかな?
と、考えています。
1つ目は、
ライブラリの読み込み順序をファイル名に付与する。
懸念点:
変更時の管理が大変
ファイル名につけた順序とライブラリ内の親子関係がDRY的かも?と。
2つ目は、
ロードモジュール内で、
Pluginのディレクトリを、
ライブラリ sys を利用して sys.path.insert する。
懸念点:
Pluginのディレクトリに変なファイルが紛れた時が不安
パスの追加が全体に関わるのが何か不安(このような事は常?)
3つ目は、
Pluginのディレクトリ内のライブラリをファイルとして全て読み込んで、
ファイル内の import をチクチク解析して親子関係を把握した後、
順序通りにライブラリを読み込む処理を作成する。
懸念点:
その処理を作る労力が....
(そもそも何か簡単に実現できる方法が無いの?と、
楽観視して質問の切っ掛けとなっています。)
そもそも、Plugin的な仕組みを利用する場合は、
一つのライブラリ内で完結させるの常であり、
同じ動的に読み込むライブラリ同士内で、
ライブラリを跨る事自体の発想が異常でしょうか?
現実的に、
Plugin内で共通する部分を切り出して基底として出して、
ライブラリにしたかっただけです。
ただ、将来的にその基底が複数になる可能性があるのと、
親子以外に孫も出来るかもしれないという事です。
ただし、多重継承はありません。
このような要求を実現している所は無いのでしょうか?
Python-ml-jp メーリングリストの案内