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 回答