浏览了相关问题,但找不到这个具体答案。
我们将 python 嵌入到我们的应用程序中,并添加了一个到 sys.meta_path 的钩子(Hook) 允许导入任意命名的模块。 (也就是说,模块定义不驻留在磁盘上,而是在包内 的内存中定义)。
这允许这样的事情:
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 钩子(Hook)之前就产生了以下错误。
ImportError:不支持按文件名导入。
我也尝试过类似的东西:
import imp imp.load_source('my_module_1', '123/56')
但同样,这甚至没有到达 meta_path Hook 。 我需要传递的任意名称实际上类似于“路径”,但不涉及磁盘路径。
有人有什么建议吗?
非常感谢, 罗布。
请您参考如下方法:
好吧,一个明显的解决方法是在源代码中使用一些不同的字符,例如管道,并让你的钩子(Hook)用斜杠替换这些字符。不过,这或多或少会很痛苦,具体取决于您的具体需求。
例如
import lol|foo
钩子(Hook)的第一行看起来像
module_name = module_name.replace ('|', '/')
