相对导入运行错误(ModuleNotFoundError: No module named '__main__.test'; '__main__' is not a package)
1. 问题说明#
在同级目录下,test.py中定义A, 需要在test1.py中导入运行。
结构如下:
报错内容如下:
>>> from .test import *
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\JetBrains\PyCharm 2019.3\plugins\python\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named '__main__.test'; '__main__' is not a package
2. 原因#
如果直接执行一个模块,那么它的 name 为 main。Python 会认为这个模块是一个最顶层的模块,而不管这个模块在文件系统中的实际位置。
理解了if name == "main":就知道是什么原因了。
3. 解决办法#
程序入口不要使用相对引入!!
如果一个.py文件a中使用了相对导入,那么a不能作为启动入口,也就是说不能直接运行a,否则会报'main' is not a package错误。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步