在学习Flask框架的蓝图时,遇到导包时用到了`from . 模块 import 对象`,然后试了试直接 import会报错,直接告诉我找不到模块,发现问题以此记录。

场景

有一个flask框架的项目,目录结构如下:

有一个主包pro_flask,然后下面有两个子包admin和web,还有和pro_flask同级的启动文件

我在与admin和web同级的__init__.py文件中,导入admin和web里的一些资源。

代码如下:

在导入admin和web中的资源时,告诉我ModuleNotFoundError: No module named 'admin'

from flask import Flask# 以下 import的admin和web,是admin和web包下__init__.py中定义的对象
from admin import admin     # 项目启动后,这里会报错
from web import web     # 项目启动后,这里会报错

admin包下的__init__.py文件

from flask import Blueprintadmin = Blueprint(               # 需要在其他模块中导入这个 admin 蓝图对象'admin',__name__,template_folder='templates',static_folder='static'
)
from . import views

web包下的__init__.py文件

from flask import Blueprintweb = Blueprint(             # 需要在其他模块中导入这个 web 蓝图对象'web',__name__,template_folder='templates',static_folder='static'
)
from . import views

了解下import和from …import区别

参考的网上大佬的笔记

import

import tkinter

(1)引用包
import引入的是包中根目录下__init__.py中的全部内容,包括其中的类、类内部的公有属性、类内部的公有方法、方法等内容.(该种方式导入包的本质就是执行__init__.py文件)

(2)引用模块
(该种方式导入模块的本质是将模块解释执行一遍,并赋值给tkinter: module_name = “module_name.py all code”)

===> import module_name —> module_name.py —> module_name.py的位置 —> sys.path(本质是一个列表)

from…import

(1)引用包
(from … import …引入的是在包中根目录下__init__.py和某个文件的内容)但是,我们知道,导入包是没有意义的,最终的目的是导入包下面的模块。(该种方式导入包)

(2)引用模块
(该种方式当如模块的本质是讲module_name.py文件掰开,把想要的部分放入当前文件执行一遍。)

分析

看了网上大佬的分析以及解决方案,自己分析下

一般情况下,python会把一些默认的包目录和用户自定义包所在的目录加载到python的搜索模块的路径集中(sys.path,是一个list列表),然后用户在进行导包时,python会去搜索的模块路径集中去寻找,所导入包的所在目录是否在这个搜索的模块路径集中,如果不存在,那么就会抛出异常找不到模块。

代码分析:启动类中,我们打印一下python搜索的模块路径集

from pro_flask import appimport sys
print(sys.path)if __name__ == '__main__':app.run()
-------------------------------------------------------
['D:\environment\python-workspace\flaskProject', 'D:\environment\python\DLLs', 'D:\environment\python\lib', 'D:\environment\python', 'D:\environment\python-workspace\flaskProject\venv', ........]

注意列表中这个'D:\environment\python-workspace\flaskProject',就是上面截图中项目所在的路径。

结论:也就是说,这个项目所在目录被加载到了python的搜索模块路径集中,所有导入包的操作都必须要从项目的目录开始找,否则就会出问题

解决方案

方案一(绝对路径)

导入模块时,从项目的根目录找起

from flask import Flaskfrom pro_flask.admin import admin # 从项目根目录下找起就可以
from pro_flask.web import web

方案二(相对路径, 推荐)

导入时,使用 . 表示从当前文件所在目录找

from flask import Flaskfrom . admin import admin # 从当前文件所在目录下开始找
from . web import web

同理,如果从上级目录开始找,那么可以用

from .. xxx import xxx

参考

参考自

import和from … import区别文章

sys.path文章


先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

Python from import导包ModuleNotFoundError No module named,找不到模块问题相关推荐

  1. 用python使用py2neo时候报“ModuleNotFoundError:No module named 'py2neo'”的错误

    用python使用py2neo时候报"ModuleNotFoundError:No module named 'py2neo'"的错误. 1 首先cmd里面输入"py2n ...

  2. python import gensim error: ModuleNotFoundError: No module named ‘dataclasses‘

    环境: conda安装的python环境,具体可参考:CSDN python 3.6.8 gensim == 4.2.0 import gensim时,报错如标题所示 问题原因:因为dataclass ...

  3. python编程django项目中ModuleNotFoundError: No module named ‘django.core.urlresolvers‘解决方法

    文章目录 遇到的问题 解决方法 参考 遇到的问题 在做<python编程-从入门到实践>书中的项目的时候,遇到No module named 'django.core.urlresolve ...

  4. 解决运行python脚本报错:ModuleNotFoundError: No module named ‘numpy‘

    报错: Traceback (most recent call last):   File "get_kpi.py", line 2, in <module>     ...

  5. python3 导入自定义包 ModuleNotFoundError: No module named '__main__ 解决办法

    网上找了好多资料也米有解决 后来我就打开cmd 一下下的试 结果还么有试两下 就OK了 下面截图说一下,看不懂的童鞋可以留言或者加群咨询我 这个是我的项目 PyQt5的一个 准备UI界面和我的代码分开 ...

  6. Python: pymysql报错ModuleNotFoundError: No module named ‘pymysql‘等没有*模块问题

    背景很简单,执行的python文件中有导入pymysql 问题 在vscode中执行文件报错: ModuleNotFoundError: No module named 'pymysql' Modul ...

  7. python no module name_python导包显示No module named XXX问题

    最近用sublime text写python脚本,在导包是一直显示No module named XXX. 问题描述: 首先文件夹的目录结构如下: count.py文件,代码如下: 1 #coding ...

  8. Python基础import导包问题

    首先我自己的环境是mac+python3.6所以以下所有问题都是基本此环境 导下级目录 python在import包的时候是查找同级目录及sys.path(python环境下)的文件. 如果想要导入下 ...

  9. 【open3d】安装open3d.whl之后,import报错ModuleNotFoundError: No module named ‘open3d.cpu‘

    我是从直接在网页上下载的open3d‑0.11.2‑cp37‑cp37m‑win_amd64.whl 运行import open3d as o3d报错No module named 'open3d.c ...

最新文章

  1. Controller 层实现
  2. 文件上传(上传至独立的文件服务器)
  3. 以太网交换机与路由—Vecloud微云
  4. CHIL-SQL-FIRST() 函数
  5. 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting
  6. OGG-00446 ERROR: Could not find archived log
  7. csv 20位数据 如何打开可以预览完整数字_干货Python Pandas 做数据分析之玩转 Excel 报表分析...
  8. stream 定长循环_Java8之Stream流代替For循环操作
  9. Signal 通过区块链慈善组织 The Giving Block 接受加密货币货币捐赠
  10. 第三视角Beta答辩总结
  11. android studio 重启adb
  12. 【GlobalMapper精品教程】014:矢量线图层的创建及数字化操作
  13. 不同空间任务要求下认知地图的神经表征
  14. HDU 2081:手机短号 (C语言)
  15. MATLAB学习笔记之matlab基础知识
  16. 设置并访问另一台电脑的共享文件夹
  17. 动圈话筒,电容话筒,驻极体话筒的区别
  18. vue输入框禁止输入表情的实现方法
  19. HDU 1083 Coures(二分图匹配)
  20. [NAS] Synology(群晖) / QNAP(威联通) 设置 MariaDB 远程访问 (附带多设备DB速度测试)

热门文章

  1. 计算机网络哪个学校好厦门,厦门较好的的计算机学校有哪几间
  2. 佛祖保佑,永无 BUG,永不修改 | KEIL 调试系列总结篇
  3. Mysql数据库和数据表的创建和信息更改的常用指令
  4. 粗读SynFace: Face Recognition with Synthetic Data
  5. Mac WiFi速度慢 WiFi卡
  6. 百分点科技位居中国数据治理解决方案市场第二
  7. 米思齐(Mixly)图形化系列教程(六)-for循环
  8. 成熟男人的修炼-国王、祭祀、诗人、武士
  9. 天龙八部本服务器的注册码,天龙八部服务端配置! - 网游单机讨论 - 藏宝湾网游单机站 - Powered by Discuz!...
  10. PHP微信公众开发笔记(二)