通过相关问题,但找不到这个具体的答案。
我们将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钩子。 我需要传递的任意名称实际上是“路径”,但不是指磁盘路径。
有人有任何建议吗?
非常感谢, 罗布。
答案 0 :(得分:0)
嗯,一个明显的解决方法是在源中使用一些不同的字符,例如管道,让你的钩子用斜杠替换这些字符。但是,根据你的具体需要,这或多或少都会带来痛苦。
E.g。
import lol|foo
你的钩子的第一行看起来像
module_name = module_name.replace ('|', '/')