によって、私は基本的な前提は、それがURLスキームに基づいてモジュールをロードしているということですmod_pythonののpublisher.pyPythonのモジュールパス
のための最小限の交換を書いています:
/foo/bar/a/b/c/d
これにより/ fooの/かもしれませんディレクトリと 'bar'は/foo/index.pyのパブリッシュ可能クラスのExposedBarメソッドです。同様に、/ fooは/foo.pyにマップされ、barは公開クラスのメソッドです。これのセマンティクスは本当に重要ではありません。
sys.path.insert(0, path_to_file) # /var/www/html/{bar|foo}
mod_obj = __import__(module_name)
mod_obj.__name__ = req.filename
モジュールは適切なクラス/関数/メソッドについて検査されます。プロセスが残りのURIデータを取得できる限り、そのメソッドまたは関数に/ a/b/cが渡されます。
私は、ブラウザで表示すると、それはかなりランダムで/var/www/html/foo/index.pyと/var/www/html/bar/index.py
を持っていたまでは正常に動作して最初の検索パスを '/ var/www/html/foo'または '/ var/www/html/bar'に設定してから__import __( 'index')をロードしても 'index.py'が選択されます。一見無作為の選択によってどちらが見つかったのか分かりません。これは次のように表示されます:
この質問は、なぜ__import__がどちらのインデックスをランダムに選択するのでしょうか。パスが '/ var/www/html'だったのであれば分かりますが、そうではありません。第2に、
モジュールを絶対パスでモジュールオブジェクトにロードできますか? sys.pathの変更なし。私はこれについて__import__またはnew.module()でドキュメントを見つけることができません。
TurboGearsを改革していますか? http://turbogears.org/ –
いいえ、ちょうど私が必要としていることを行う、まともな出版社を探しています。このように手を汚すことは、Pythonを学ぶ良い方法です。 –
実際、私の質問は修辞的でした。彼らが何をしているかを非常に詳しく見たいと思うかもしれません、それはあなたに多くの時間と労力を節約するかもしれません。 –