Python from import导包ModuleNotFoundError No module named,找不到模块问题
在学习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文章
Python from import导包ModuleNotFoundError No module named,找不到模块问题相关推荐
- 用python使用py2neo时候报“ModuleNotFoundError:No module named 'py2neo'”的错误
用python使用py2neo时候报"ModuleNotFoundError:No module named 'py2neo'"的错误. 1 首先cmd里面输入"py2n ...
- python import gensim error: ModuleNotFoundError: No module named ‘dataclasses‘
环境: conda安装的python环境,具体可参考:CSDN python 3.6.8 gensim == 4.2.0 import gensim时,报错如标题所示 问题原因:因为dataclass ...
- python编程django项目中ModuleNotFoundError: No module named ‘django.core.urlresolvers‘解决方法
文章目录 遇到的问题 解决方法 参考 遇到的问题 在做<python编程-从入门到实践>书中的项目的时候,遇到No module named 'django.core.urlresolve ...
- 解决运行python脚本报错:ModuleNotFoundError: No module named ‘numpy‘
报错: Traceback (most recent call last): File "get_kpi.py", line 2, in <module> ...
- python3 导入自定义包 ModuleNotFoundError: No module named '__main__ 解决办法
网上找了好多资料也米有解决 后来我就打开cmd 一下下的试 结果还么有试两下 就OK了 下面截图说一下,看不懂的童鞋可以留言或者加群咨询我 这个是我的项目 PyQt5的一个 准备UI界面和我的代码分开 ...
- Python: pymysql报错ModuleNotFoundError: No module named ‘pymysql‘等没有*模块问题
背景很简单,执行的python文件中有导入pymysql 问题 在vscode中执行文件报错: ModuleNotFoundError: No module named 'pymysql' Modul ...
- python no module name_python导包显示No module named XXX问题
最近用sublime text写python脚本,在导包是一直显示No module named XXX. 问题描述: 首先文件夹的目录结构如下: count.py文件,代码如下: 1 #coding ...
- Python基础import导包问题
首先我自己的环境是mac+python3.6所以以下所有问题都是基本此环境 导下级目录 python在import包的时候是查找同级目录及sys.path(python环境下)的文件. 如果想要导入下 ...
- 【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 ...
最新文章
- Controller 层实现
- 文件上传(上传至独立的文件服务器)
- 以太网交换机与路由—Vecloud微云
- CHIL-SQL-FIRST() 函数
- 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting
- OGG-00446 ERROR: Could not find archived log
- csv 20位数据 如何打开可以预览完整数字_干货Python Pandas 做数据分析之玩转 Excel 报表分析...
- stream 定长循环_Java8之Stream流代替For循环操作
- Signal 通过区块链慈善组织 The Giving Block 接受加密货币货币捐赠
- 第三视角Beta答辩总结
- android studio 重启adb
- 【GlobalMapper精品教程】014:矢量线图层的创建及数字化操作
- 不同空间任务要求下认知地图的神经表征
- HDU 2081:手机短号 (C语言)
- MATLAB学习笔记之matlab基础知识
- 设置并访问另一台电脑的共享文件夹
- 动圈话筒,电容话筒,驻极体话筒的区别
- vue输入框禁止输入表情的实现方法
- HDU 1083 Coures(二分图匹配)
- [NAS] Synology(群晖) / QNAP(威联通) 设置 MariaDB 远程访问 (附带多设备DB速度测试)
热门文章
- 计算机网络哪个学校好厦门,厦门较好的的计算机学校有哪几间
- 佛祖保佑,永无 BUG,永不修改 | KEIL 调试系列总结篇
- Mysql数据库和数据表的创建和信息更改的常用指令
- 粗读SynFace: Face Recognition with Synthetic Data
- Mac WiFi速度慢 WiFi卡
- 百分点科技位居中国数据治理解决方案市场第二
- 米思齐(Mixly)图形化系列教程(六)-for循环
- 成熟男人的修炼-国王、祭祀、诗人、武士
- 天龙八部本服务器的注册码,天龙八部服务端配置! - 网游单机讨论 - 藏宝湾网游单机站 - Powered by Discuz!...
- PHP微信公众开发笔记(二)