【发布时间】:2011-12-19 14:56:08
【问题描述】:
浏览了相关问题,但找不到这个具体的答案。
我们将 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 钩子。 我需要传递的任意名称实际上类似于“路径”,但不要引用磁盘路径。
有人有什么建议吗?
非常感谢, 抢。
【问题讨论】:
-
在我看来这是python实现中的错误,假设遇到斜杠时名称是文件名。它应该通过常规机制(meta_path 挂钩等)进行,并像往常一样报告错误。不明白这种冒昧错误的必要性?
-
它们是否足够像路径,以至于您可以将它们视为包,具有适当的
__init__.pys,并且像处理常规文件一样使用点符号?
标签: python syntax import names