ModuleNotFoundError:没有名为"CGI"的模块。实用'; 'CGI'不是包



我是Pythonizer的作者-一个Perl到Python的翻译器,我目前正在尝试翻译CGI。pm导入Python。输出文件为CGI.py。我在这个导入上得到这个错误:

perllib.init_package("CGI", is_class=True)  # Creates builtins.CGI = namespace
sys.path[0:0] = ["./PyModules"]
from CGI.Util import (ascii2ebcdic, ebcdic2ascii, escape, expires, make_attributes, rearrange, rearrange_header, unescape)
ModuleNotFoundError: No module named 'CGI.Util'; 'CGI' is not a package

PyModules目录下包含CGI/Util.py。请注意,生成的包含此代码的文件名为CGI.py。我知道这是一个禁忌,并且还注意到perllib.init_package("CGI"...)创建了builtinsCGI属性,这样当您提到CGI时,您就会得到该名称空间。

所以我的问题是——你知道如何避免这个问题吗?我正在考虑使用__import__对于这种情况下,如果这是唯一的选择,并通过"这个情况"我的意思是我生成的文件名与我要导入的东西的前缀相同-或者-我有一个名称空间(不确定是哪个导致了这个问题-可能两者都有)。如有真知灼见,不胜感激。

在Python中,为了使用子模块,你必须在包中有父模块。这意味着如果CGI有子模块,CGI.py应该放在CGI/__init__.py中,那么import CGI仍然可以工作,但from CGI.Util import ...也可以正确地找到CGI/Util.py

最新更新