Python from import导包ModuleNotFoundError No module named找不到模块问题解决

目录
  • 前言
  • 场景
  • 了解下import和from …import区别
    • import
    • from…import
  • 分析
  • 解决方案
    • 方案一(绝对路径)
    • 方案二(相对路径, 推荐)
  • 参考
  • 总结

前言

在学习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文章

总结

到此这篇关于Python from import导包ModuleNotFoundError No module named找不到模块问题解决的文章就介绍到这了,更多相关Python from import导包找不到模块内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python导包模块报错的问题解决

    Python导包模块报错的问题 Moelimoe import报错No module named "xxx"的问题如何将指定目录作为项目根目录,让项目根目录下的包/模块都可以直接导入?(linux下)Python导入模块时,解释器如何定位模块:1.当前目录2.内置模块列表3.sys.path列表的目录 由于python没有定位到模块目录时出现的No module named "xxx"问题,大概有两种解决思路:1.在sys.path永久加入需要导入的模块的父目录:2

  • 浅谈Python脚本开头及导包注释自动添加方法

    1.开头:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定 #!/usr/bin/python 是用来说明脚本语言是python的 是要用/usr/bin下面的程序(工具)python,这个解释器,来解释python脚本,来运行python脚本的. #!/usr/bin/python:是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器: #!/usr/bin/env python(推荐):这种用法是为了防止操作系

  • python导包的几种方法(自定义包的生成以及导入详解)

    python是一门灵活的语言,也可以说python是一门胶水语言,顾名思义,就是其可以导入各类的包,python的包可以说是所有语言中最多的.当然导入包大部分是为了更快捷,更方便,效率更高.对于刚入门的python爱好者来说最初接触的应该是import直接导入包的方式,例如 import time,就是导入了python的time包,这个包中的方法可以处理大部分我们项目中遇到的关于时间的问题. 下面我会详细介绍几种导入包的方式(在开发过程中绝对够用)以及怎样把其他文件夹中的python模块生成我

  • python文件读取和导包的绝对路径、相对路径详解

    目录 一.文件读取的绝对路径和相对路径 二.package的绝对路径及相对路径导入 2.1 导包以绝对路径导入 2.2 导包以相对路径导入 三.运行脚本的当前工作路径和绝对路径 总结 文件目录层级 一.文件读取的绝对路径和相对路径 用相对路径和绝对路径读取上一层目录的文件.下一层目录的文件及读取同层级的文件. # @File : platform.py.py """1.绝对路径读取文件""" with open(r"C:\Users\c

  • 浅谈python编译pyc工程--导包问题解决

    利用python 编译工程,生产pyc文件 pyc文件好处:是一种二进制机器码,并且隐藏了源文件代码,但是有和py文件一样的功能(可以理解为效果一样) 所以可以将代码隐藏,便于商业价值,保护代码隐私还能和py文件一样可运行 import compileall compileall.compile_dir(r'/path') 所以在一些情况下,需将源文件工程批量生成pyc文件来隐藏代码. 上面代码即为 批量生成pyc的脚本更改path路径为根目录即可(根目录为最顶层目录需包括所有用到的文件) 运行

  • Python from import导包ModuleNotFoundError No module named找不到模块问题解决

    目录 前言 场景 了解下import和from …import区别 import from…import 分析 解决方案 方案一(绝对路径) 方案二(相对路径, 推荐) 参考 总结 前言 在学习Flask框架的蓝图时,遇到导包时用到了`from . 模块 import 对象`,然后试了试直接 import会报错,直接告诉我找不到模块,发现问题以此记录. 场景 有一个flask框架的项目,目录结构如下: 有一个主包pro_flask,然后下面有两个子包admin和web,还有和pro_flask同

  • 下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决

    前言 最近在网上找了很多下载Crypto的方法,感觉作用都不算很大,然后自己瞎搞瞎搞就搞好了

  • PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'

    PyCharm不识别PyQt5的问题如图所示,引用PyQt5的时候显示错误"ModuleNotFoundError: No module named 'pyqt5'" 首先确定已经安装了PyQt5是成功的 Python\Python36\Lib\site-packages这个路径下面去看有没有PyQt5相关的库 通过python的命令引用PyQt5成功,表示PyQt5安装没有问题 Python环境变量配置一般没有问题,很少,如果有,就无法运行 最新版的PyCharm,因为高版本pych

  • 重启宝塔面板后提示-ModuleNotFoundError: No module named 'geventwebsocket'

    背景: 因服务器部署了flask项目,安装了python3,故重启宝塔面板报错 [Traceback (most recent call last): File "/root/anaconda3/lib/python3.7/site-packages/gunicorn/util.py", line 135, in load_class   mod = import_module('.'.join(components)) File "/root/anaconda3/lib/p

  • 解决python中import文件夹下面py文件报错问题

    如下所示: 在需要导入的那个文件夹里面新建一个 __init__.py文件,哪怕这个文件是空的文件也可以. 补充知识:python中import其他目录下的文件出现问题的解决方法 在使用python进行编程的时候,import其他文件路径下的.py文件时报错 Traceback (most recent call last): File "download_and_convert_data.py", line 44, in <module> from .datasets i

  • Python中的 No Module named ***问题及解决

    目录 No Module named ***问题 问题描述 python3 No module named 'PIL' 使用命令 No Module named ***问题 问题描述 使用python的时候,老是遇见No Module named的问题,例如在使用TensorFlow Object Detection API的过程中(GitHub:DetectionAPI),过程中的问题 1)protc编译失败 2)object_detection模块导入错误 from object_detec

  • 解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题

    问题产生: pycharm→settings→Project interpreter→下载matplotlib包 运行代码,出现以下提示:找不到'matplotlib'模块ModuleNotFoundError: No module named 'matplotlib' 检查路径: 没有错误-- 让我们试试下面的步骤: 右上角,点击Edit Configuration: 发现Python interpreter路径非当前python文件,点击设置为默认路径 问题解决. 以上这篇解决Pycharm

  • No module named ‘win32gui‘ 的解决方法(踩坑之旅)

    在此把踩过的坑记录下来,我失败的方式,你们可能成功,我成功的方法,你们可能失败.这些包啊库啊的,经验也就是这样了.也许换个时间再执行一次,莫名其妙的可能就成了.bug就是这么奇妙,跟人生一样.说不出来原因,也许有一天我能成为大佬,再回来补上吧. 问题:ModuleNotFoundError: No module named 'win32gui' round 1.pycharm中settings,失败 round 2.pycharm中的Terminal执行pip install pypiwin32

随机推荐