如何在带有if __name __ =’__ main__’块的Python3中
我正在制作一个包,如果__name __ ==’__ main__’:测试用的块,则该包中的模块内部都有代码.但是我尝试在这些模块中使用相对导入会导致错误. 我已经阅读了此主题以及其他十亿主题: 在将其标记为重复项之前,如果我想做的事情在Python3中是不可能的,那么我的问题是为什么它在Python2中能工作,是什么促使在Python3中做出如此麻烦的决定? 这是我的示例Python项目:
__init__.py和module2.py为空 module1.py包含:
在Python2中可以正常工作.我可以从计算机上其他任何地方的其他项目中导入module1,也可以直接运行module1并在if块中运行代码. 但是,此结构在Python3中不起作用.如果我尝试将模块导入其他地方,它将失败:
因此,我尝试将第一行更改为从.导入module2,并对其进行了修复,因此我可以成功地从任何地方导入模块.但是,当我尝试直接将module1作为脚本运行时,出现此错误:
我不想每次在模块上工作时都想打开控制台并键入python -m myfile并想直接将其作为脚本运行. 我希望能够像在Python2中那样使用相对导入,而无需将其父文件夹添加到PYTHONPATH即可处理模块 有没有更好的解决方法或解决这些问题的方法? 最佳答案
根据Module documentation,对于__main__模块,您必须使用绝对导入.
因此,只需将module1.py中的导入行更改为: 从mypackage导入模块2 其他所有内容保持不变. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |