py
特定のモジュールのファイルのファイルシステム上の場所を実行時に確実に検出するための最良の方法を見つけようとしています。クリーンさとメンテナンスのしやすさのために、いくつかのメソッド(この場合、インターフェイスがモジュールで定義されているサービス呼び出しからの応答の検証に使用されるスキーマ)に関するいくつかの構成データを外部化することを計画しているため、これを行う必要があります。
システムの簡略化された図:
package
|
|-service.py
|
|-call1.scm
|
|-call2.scm
service.py(_call()
基本クラスのメソッドですが、質問とは関係ありません)
class FooServ(AbstractService):
def call1(*args):
result = self._call('/relative/uri/call1', *args)
# additional call specific processing
return result
def call2(*args):
result = self._call('/relative/uri/call2', *args)
# additional call specific processing
return result
call1.scmとcall2.scmは、応答スキーマを定義します(現在の場合、ドラフトJSONスキーマ形式を使用しますが、質問とは無関係です)
service.py
コードベースの別の場所で、サービス呼び出しが実際に行われるときに、ファイル構造をトラバースしてscmファイルを見つけることができるようにの場所を検出できるようにしたいと思います。少なくとも私のシステムでは、これでうまくいくと思います。
# I realize this is contrived here, but in my code, the method is accessed this way
method = FooServ().call1
module_path = sys.modules[method.__self__.__class__.__module__].__file__
schema_path = os.path.join(os.path.dirname(module_path), method.__name__ + '.scm')
ただし、これがすべてのプラットフォームとインストール構成で安全であることを確認したかったので、調査中にこれに遭遇したため、この方法でこれを実行しようとすると確実に機能しないのではないかと心配しました。__file__
これは普遍的に機能しますか、それともモジュールオブジェクトでファイルの場所が返されるという事実は、pyc
ファイルの横以外の場所にある可能性があり、py
このソリューションを無効にしますか?効果がなくなる場合は、代わりに何ができますか?