环境:python 3.6.5,centos7,windows10
0x00 问题现状
最近在import模块(包)时遇到一个问题,ModuleNotFoundError: No module named '__main__.msg_backend'; '__main__' is not a package
- 文档目录结构
Server |__server.py |__msg_backend |__ __init__.py |__redis.py |__views.py
- Server/server.py
- Server/msg_backend/views.py
- 运行Server/server.py报错
0x01 Windows10下解决方法
方法一:使用sys和os模块将当前文件夹Server加入包扫描路径(不推荐)
- 在入口文件Server/server.py中修改代码。
注意圈出部分与原文件的区别
方法二:将当前文件夹Server变成Python package(推荐)
- 在Server文件夹下增加
__init__.py
文件
- 入口文件Server/server.py,依旧采用
from Server.msg_backend.views import url_map
方式
Done!
0x02 Linux下解决办法
- 还是那个有问题的文档目录结构
Server |__server.py |__msg_backend |__ __init__.py |__redis.py |__views.py
- 先把Server文件夹也变成Python package
- 导模块的地方改为
from msg_backend.views import url_map
- 运行
python3 server.py
,无报错
Done!
0x03 注意
包名与模块名一定不要重名
。比如我一开始主文件夹叫Server
,它下面的入口模块也叫Server.py
Server
|__Server.py
|__msg_backend
|__ __init__.py
|__redis.py
|__views.py
这样一来,上述两种方法都不起效。发现这问题之前,我简直崩溃…,不过你们应该没我这么蠢叭