Python from import导包ModuleNotFoundError No module named找不到模块问题解决
作者:鸢尾の 发布时间:2023-07-27 20:06:53
前言
在学习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 Blueprint
admin = Blueprint(# 需要在其他模块中导入这个 admin 蓝图对象
'admin',
__name__,
template_folder='templates',
static_folder='static'
)
from . import views
web包下的__init__.py文件
from flask import Blueprint
web = 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 app
import 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 Flask
from pro_flask.admin import admin# 从项目根目录下找起就可以
from pro_flask.web import web
方案二(相对路径, 推荐)
导入时,使用 . 表示从当前文件所在目录找
from flask import Flask
from . admin import admin# 从当前文件所在目录下开始找
from . web import web
同理,如果从上级目录开始找,那么可以用
from .. xxx import xxx
参考
import和from … import区别文章
sys.path文章
来源:https://blog.csdn.net/weixin_45248492/article/details/124273382


猜你喜欢
- 针对很普遍的每个元素的操作会遍历每个元素进行操作。这里给出了几种写法,列表每个元素自增等数学操作同理;示例:整形列表ilist加1个数、元素
- 我们首先来看下实例代码:function sig_handler($sig){ print("handled sig:
- 概述PHP有着众多的内置函数,其中大多数函数都被开发者广发使用。但也有一些同样有用却被遗忘在角落,本文将介绍7个鲜为人知功能却非常酷的函数。
- 当你执行大型程序的时候,突然出现exception,会让程序直接停止,这种对服务器自动程序很不友好,而python有着较好的异常捕获机制,不
- RSA加密是一种非对称加密,通常使用公钥加密,私钥解密,私钥签名,公钥验签。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解
- function test(){ return 123; } 显然这是一个函数声明,那下面的呢 var b=f
- 1.文件介绍python操作文件1.1python文件的基本操作打开文件关键字open语法格式:open('文件路径',
- 读取binlog,方法有二:1.使用mysqlbinlog,详细用法,请参考MySQL手册2.使用MySQL的自带工具,SHOW BINLO
- #_*_coding:utf_8_import sysimport osclass Graph(): d
- import 机制功能Python 的 import 机制基本上可以切分为三个不同的功能:Python运行时的全局模块池的维护和搜索;解析与
- 这篇文章主要介绍了python定义类self用法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 1. 流程2. 核心架构简单来说 MySQL 主要分为 Server 层和存储引擎层:Server 层:主要包括连接器、查询缓存、分析器、优
- 我们常常看到一个这样的表达式 A=lambda x:x+1可能会一头雾水不知道怎么计算 最基本的理解就是def A(x):retu
- 前言最近有个项目需求就是在客户端的右上角要实时展示提醒消息,下面来看下简单的实现步骤一、Notification这是基于悬浮出现在页面角落,
- 相信大家都知道html和css,知道html结构和css表现分离,知道html语义化,这些都是这几年的热门关键字。语义化的html在国内也是
- 今天看到同事参与小米的抢购,几经数个星期的尝试,终于抢到了一台小米电视……看了一下小米的抢购流程,似乎可以用程序可破。于是想写点东西玩玩(你
- 这篇文章主要介绍了python plotly画柱状图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 目录什么是pyecharts?pyecharts安装加载折线图的绘制条形图和折线图的结合绘制漏斗图什么是pyecharts?pyechart
- 发现问题在golang中,对文件进行写操作时出现上面的错误。首先复现下这个问题。package mainimport ( "os&
- 前言之前在进行深度学习训练的时候,偶然发现使用PIL读取图片训练的效果要比使用python-opencv读取出来训练的效果稍好一些,也就是训