Python3 Import报错__main__ is not a package

环境:python 3.6.5,centos7,windows10

目录

      • 0x00 问题现状
      • 0x01 Windows10下解决方法
        • 方法一:使用sys和os模块将当前文件夹Server加入包扫描路径(不推荐)
        • 方法二:将当前文件夹Server变成Python package(推荐)
      • 0x02 Linux下解决办法
      • 0x03 注意

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
    Python3 Import报错__main__ is not a package_第1张图片
  • Server/msg_backend/views.py
    Python3 Import报错__main__ is not a package_第2张图片
  • 运行Server/server.py报错
    Python3 Import报错__main__ is not a package_第3张图片

0x01 Windows10下解决方法

方法一:使用sys和os模块将当前文件夹Server加入包扫描路径(不推荐)

  • 在入口文件Server/server.py中修改代码。注意圈出部分与原文件的区别
    Python3 Import报错__main__ is not a package_第4张图片

方法二:将当前文件夹Server变成Python package(推荐)

  • 在Server文件夹下增加__init__.py文件
    Python3 Import报错__main__ is not a package_第5张图片
  • 入口文件Server/server.py,依旧采用from Server.msg_backend.views import url_map方式
    Python3 Import报错__main__ is not a package_第6张图片
    Done!

0x02 Linux下解决办法

  • 还是那个有问题的文档目录结构
    Server
    	|__server.py
    	|__msg_backend
    		|__ __init__.py
    		|__redis.py
    		|__views.py
    
  • 先把Server文件夹也变成Python package
    Python3 Import报错__main__ is not a package_第7张图片
  • 导模块的地方改为from msg_backend.views import url_map
    Python3 Import报错__main__ is not a package_第8张图片
  • 运行python3 server.py,无报错
    在这里插入图片描述
    Done!

0x03 注意

包名与模块名一定不要重名。比如我一开始主文件夹叫Server,它下面的入口模块也叫Server.py

	Server
		|__Server.py
		|__msg_backend
			|__ __init__.py
			|__redis.py
			|__views.py

这样一来,上述两种方法都不起效。发现这问题之前,我简直崩溃…,不过你们应该没我这么蠢叭

你可能感兴趣的:(pure,python)