导入语句中带有斜杠的任意python名称

时间:2011-11-01 15:49:59

标签: python syntax import names

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

我们将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钩子。 我需要传递的任意名称实际上是“路径”,但不是指磁盘路径。

有人有任何建议吗?

非常感谢, 罗布。

1 个答案:

答案 0 :(得分:0)

嗯,一个明显的解决方法是在源中使用一些不同的字符,例如管道,让你的钩子用斜杠替换这些字符。但是,根据你的具体需要,这或多或少都会带来痛苦。

E.g。

import lol|foo

你的钩子的第一行看起来像

module_name = module_name.replace ('|', '/')