在导入语句中使用带斜杠的任意Python名称
我看过相关的问题,但找不到这个具体的答案。
我们正在把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钩子。
我需要传递的任意名称实际上是类似“路径”的,但并不指代磁盘路径。
有没有人有什么建议?
非常感谢,
Rob。
1 个回答
0
一个明显的解决办法是,在源代码中使用一些不同的字符,比如竖线,然后让你的钩子把这些字符替换成斜杠。不过,这个方法的难易程度会根据你具体的需求而有所不同。
比如:
import lol|foo
在你的钩子的第一行看起来像这样:
module_name = module_name.replace ('|', '/')