我是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"...)
创建了builtins
的CGI
属性,这样当您提到CGI
时,您就会得到该名称空间。
所以我的问题是——你知道如何避免这个问题吗?我正在考虑使用__import__对于这种情况下,如果这是唯一的选择,并通过"这个情况"我的意思是我生成的文件名与我要导入的东西的前缀相同-或者-我有一个名称空间(不确定是哪个导致了这个问题-可能两者都有)。如有真知灼见,不胜感激。
在Python中,为了使用子模块,你必须在包中有父模块。这意味着如果CGI有子模块,CGI.py
应该放在CGI/__init__.py
中,那么import CGI
仍然可以工作,但from CGI.Util import ...
也可以正确地找到CGI/Util.py
。