2

関連する質問を調べましたが、この特定の回答が見つかりません。

アプリケーションに Python を組み込み、任意の名前のモジュールをインポートできるように sys.meta_path にフックを追加しました。(つまり、モジュール定義はディスク上に存在しませんが、パッケージ内のメモリ内で定義されます)。

これにより、次のことが可能になります。

import my_module_1#2#31421

あるいは:

__import__("my_module_1#2#31321")

この問題は、特定のラベル自体にスラッシュが含まれている場合に発生します。

import my_module_1/123/56

また

__import__("my_module_1/123/56")

meta_path フックを読み取る前に、次のエラーが発生します。

ImportError: ファイル名によるインポートはサポートされていません。

次のようなことも試しました:

import imp imp.load_source('my_module_1', '123/56')

しかし、これも meta_path フックに到達しません。渡す必要がある任意の名前は、実際には「パス」のようなものですが、ディスク パスを参照していません。

誰か提案はありますか?

どうもありがとう、ロブ。

4

1 に答える 1

0

明らかな回避策は、パイプなどの別の文字をソースで使用し、フックでそのような文字をスラッシュに置き換えることです。ただし、正確に必要なものに応じて、多かれ少なかれ苦痛になります.

例えば

import lol|foo

フックの最初の行は次のようになります

module_name = module_name.replace ('|', '/')
于 2011-11-01T17:09:03.110 に答える