python ModuleNotFoundError

关于python的引包 ,当我们的项目很大有很多子文件时候,或许会遇到导包问题,假如我们的项目树如下图

在 spider_test.py  编码

class Spiders(object):

    @staticmethod
    def print_data():
        print('spiders')

 我们在 class_models.py  编写代码 并运行 结果报错, 为什么 我们来看下

class ClassModels(object):

    @staticmethod
    def print_data():
        print('models + 12345')


from spiders import spider_test
spider_test.Spiders.print_data()
/Users/ysl/.virtualenvs/develop_py3/bin/python3 /Users/ysl/media_spider_myself/test_path/models/class_models.py
Traceback (most recent call last):
  File "/Users/ysl/media_spider_myself/test_path/models/class_models.py", line 27, in <module>
    from spiders import spider_test
ModuleNotFoundError: No module named 'spiders'

我们在class_models.py  打印当前  sys.path 看下路径,可以看到当前文件下,解释器路径里面有两个路径 1 当前文件路径 2 项目根路径 。 也就说你可以从根目录引入 这样应该是没问题,我们试下

import sys
print(sys.path)

['/Users/ysl/media_spider_myself/test_path/models', '/Users/ysl/media_spider_myself', '/Users/ysl/.virtualenvs/develop_py3/lib/python36.zip', '/Users/ysl/.virtualenvs/develop_py3/lib/python3.6', '/Users/ysl/.virtualenvs/develop_py3/lib/python3.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Users/ysl/.virtualenvs/develop_py3/lib/python3.6/site-packages', '/Applications/PyCharm.app/Contents/helpers/pycharm_matplotlib_backend']

从上层目录引入 成功了

class ClassModels(object):

    @staticmethod
    def print_data():
        print('models + 12345')


from test_path.spiders import spider_test
spider_test.Spiders.print_data()


# /Users/ysl/.virtualenvs/develop_py3/bin/python3 /Users/ysl/media_spider_myself/test_path/models/class_models.py
spiders

总结:在一文件下 ,解释器会加载两个路径,

  1. 当前文件路径
  2. 项目根路径

  所以我们示例中的 class_models.py 引包的方式 有两种

  • 第一种 根目录下分级引入
  • 第二种  将当前文件路径添加到sys.path 路径中 见下文
import os
import sys

curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)

from spiders import spider_test
spider_test.Spiders.print_data()

print(sys.path)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "ModuleNotFoundError" 是在 Python 中常见的错误,它表示程序尝试导入一个不存在的模块。可能是因为缺少了相应的库或模块,或者是输入了错误的模块名称。解决方法是确保所需模块已正确安装,并检查模块名称是否正确。 ### 回答2: ModuleNotFoundErrorPython中的一个错误类型,意思是无法找到指定的模块。这个错误通常有以下几种情况: 1. 模块不存在:可能是因为你尝试导入一个不存在的模块。在Python中,模块是一个包含了函数、类和变量的文件。如果你尝试导入一个并不存在的模块,就会产生ModuleNotFoundError。 2. 模块未安装:如果你尝试导入一个已经存在但未安装的模块,也会产生ModuleNotFoundError。在Python中,我们可以通过pip或conda等包管理器来安装模块。如果你忘记安装某个依赖模块,就会出现这个错误。 3. 模块路径问题:Python解释器在导入模块时会查找sys.path变量中的路径。如果你的模块不在这些路径中,Python就无法找到它。你可以通过添加模块所在目录到sys.path或将模块移到已有的路径中来解决这个问题。 4. 环境问题:有时候,ModuleNotFoundError可能是因为你的Python环境配置错误。可能是你使用的Python版本过低,或者你的PYTHONPATH环境变量没有正确设置。 解决ModuleNotFoundError的方法包括: 1. 检查模块名是否正确,确保没有拼写错误。 2. 确认模块是否已经安装,如果没有安装则使用包管理器进行安装。 3. 检查模块的路径是否正确,可以尝试将模块所在目录添加到sys.path或将模块移到已有路径中。 4. 检查Python环境是否配置正确,确保使用的是正确的Python版本和正确设置的PYTHONPATH。 总结一下,ModuleNotFoundError是由于无法找到指定的模块而产生的错误。我们可以通过确认模块名、安装模块、设置模块路径和正确配置Python环境来解决这个问题。 ### 回答3: PythonModuleNotFoundError是一个常见的错误,表示找不到要导入的模块。出现这个错误可能有以下几个原因: 1. 模块名错误:请检查你在导入模块时使用的模块名是否正确。模块名是区分大小写的,所以要保证大小写一致。另外,还要确保模块文件与当前使用的脚本在同一目录下,或者模块文件所在的目录已经添加到了环境变量中。 2. 模块未安装:如果你要导入的模块不是Python内置的模块,可能需要通过pip或其他方式进行安装。请检查是否已经正确安装了该模块。 3. 模块未添加到系统路径:Python解释器默认只会在一些特定的路径中搜索模块。如果你想导入的模块不在这些路径下,需要手动将该模块所在的路径添加到系统路径中。 4. 环境配置问题:有时,模块找不到是因为Python解释器的环境配置出现了问题。这种情况下,可以尝试重新安装Python或者使用虚拟环境来解决问题。 综上所述,ModuleNotFoundError的解决方法可以从以下几个方面着手:检查模块名是否正确、确保模块已经安装、添加模块所在路径到系统路径中、检查Python环境配置是否正确。根据具体情况,在这些方面逐一排查问题,就能解决ModuleNotFoundError

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值