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

import语句中带有斜杠的任意python名称,python,syntax,import,names,Python,Syntax,Import,Names,已阅读相关问题,但找不到具体答案 我们将python嵌入到我们的应用程序中,并为sys.meta_路径添加了一个钩子 允许导入任意命名的模块。 (也就是说,模块定义不驻留在磁盘上,而是在包的内存中定义的) 这样可以实现以下功能: import my_module_1#2#31421 import imp imp.load_source('my_module_1', '123/56') 甚至: __import__("my_module_1#2#31321") 当特定标签本身包含斜杠时,就会

已阅读相关问题,但找不到具体答案

我们将python嵌入到我们的应用程序中,并为sys.meta_路径添加了一个钩子 允许导入任意命名的模块。 (也就是说,模块定义不驻留在磁盘上,而是在包的内存中定义的)

这样可以实现以下功能:

import my_module_1#2#31421
import imp imp.load_source('my_module_1', '123/56')
甚至:

__import__("my_module_1#2#31321")
当特定标签本身包含斜杠时,就会出现问题

import my_module_1/123/56

在读取meta_路径挂钩之前,它会创建以下错误

导入错误:不支持按文件名导入。

我也试过这样的方法:

import my_module_1#2#31421
import imp imp.load_source('my_module_1', '123/56')
但同样,这甚至没有到达meta_路径挂钩。 我需要传递的任意名称实际上与“路径”类似,但并不指向磁盘路径

有人有什么建议吗

非常感谢,
Rob.

好吧,一个明显的解决办法是在源代码中使用一些不同的字符,例如管道,并让钩子用斜线替换这些字符。不过,这取决于你到底需要什么,会有或多或少的痛苦

例如

钩子的第一条线看起来像什么

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

嗯,一个明显的解决办法是在源代码中使用一些不同的字符,例如管道,并让钩子用斜线替换这些字符。不过,这取决于你到底需要什么,会有或多或少的痛苦

例如

钩子的第一条线看起来像什么

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

在我看来,这是python实现中的一个错误,假设遇到斜杠时名称是文件名。它应该通过常规机制(meta_路径挂钩等)继续运行,并像往常一样报告错误。我不明白这个冒昧错误的必要性?它们的路径是否足够类似于您可以将它们视为包,具有适当的
\uuuu init\uuuuupy
s,并像处理常规文件一样使用点符号?在我看来,这是python实现中的一个错误,假设遇到斜杠时名称是文件名。它应该通过常规机制(meta_路径挂钩等)继续运行,并像往常一样报告错误。不理解这种对这个冒昧错误的需求吗?它们的路径是否足够类似于您可以将它们视为包,具有适当的
\uuuu init\uuuuuy.py
s,并像处理常规文件一样使用点表示法?这将是我们脚本语言中的一个主要漏洞。我的假设正确吗?这个python错误没有任何作用,因为它错误地假设Im传入一个文件名,而它本身允许不在磁盘上的模块?好吧,因为这通常是一个错误,可能是的。我想这些事情最好在CPython邮件列表上讨论。除非您愿意自行编译Python解释器,否则我看不到解决此错误的“正确”方法。这两种方法都不会是错误,因为meta_path钩子将正确地拦截和处理某些名称。我会在cpython邮件列表上询问(我想这是询问更改的最佳地点?)谢谢!我的意思是,在标准环境中这将是一个错误(标准Python模块名称中不允许使用斜杠,不是吗?),因此更显式的错误是多余的。如果它是在钩子说了算之后扔的,那么它也是无害的。也许CPython开发人员认为路径斜杠是如此糟糕的想法,他们甚至不想让钩子运行,但更可能是一种疏忽(例如Windows路径反斜杠似乎没有特别的处理,至少在Linux上)。酷。我将把它提交到bugs.python.org,看看会发生什么。谢谢你帮我澄清。这将是我们脚本语言中的一个主要漏洞。我的假设正确吗?这个python错误没有任何作用,因为它错误地假设Im传入一个文件名,而它本身允许不在磁盘上的模块?好吧,因为这通常是一个错误,可能是的。我想这些事情最好在CPython邮件列表上讨论。除非您愿意自行编译Python解释器,否则我看不到解决此错误的“正确”方法。这两种方法都不会是错误,因为meta_path钩子将正确地拦截和处理某些名称。我会在cpython邮件列表上询问(我想这是询问更改的最佳地点?)谢谢!我的意思是,在标准环境中这将是一个错误(标准Python模块名称中不允许使用斜杠,不是吗?),因此更显式的错误是多余的。如果它是在钩子说了算之后扔的,那么它也是无害的。也许CPython开发人员认为路径斜杠是如此糟糕的想法,他们甚至不想让钩子运行,但更可能是一种疏忽(例如Windows路径反斜杠似乎没有特别的处理,至少在Linux上)。酷。我将把它提交到bugs.python.org,看看会发生什么。谢谢你帮我澄清。