在导入语句中使用带斜杠的任意Python名称

2 投票
1 回答
1978 浏览
提问于 2025-04-17 05:25

我看过相关的问题,但找不到这个具体的答案。

我们正在把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 ('|', '/')

撰写回答