我最近将我的 Python 项目移植到 Python 3.1 上运行。为此,我必须在项目的子模块和子包中采用相对导入的策略。我没有这样做,现在项目本身可以工作,但我注意到我无法执行其中的任何子包或子模块。如果我尝试,我会收到“builtins.ValueError:尝试在非包中进行相对导入”。我只能导入整个项目。
这是正常的吗?
是的,这很正常。如果你想执行一个模块,它也是包的一部分(这本身就是一件奇怪的事情),你需要有绝对导入。当您执行该模块时,从解释器的角度来看,它不是包的一部分,而是__main__
模块。所以它不知道相关的包在哪里。
标准方法是在包中包含函数,以及调用函数的单独可执行脚本,因为这使您可以将可执行脚本放在模块外部,例如在 /usr/bin 中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)