调用自定义模块出现ModuleNotFoundError

产生问题的原因:IDE(pycharm)没有将自定义模块所在目录添加到工作目录中,导致在搜索目录中找不到要调用的模块。

Python会在以下路径中搜索它想要寻找的模块:

  • 程序所在的文件夹
  • 标准库的安装路径
  • 操作系统环境变量PYTHONPATH所包含的路径

解决方法1:在调用自定义模块前先将自定义模块/想要调用的函数所在的目录添加到工作目录中

:运行某py文件时,要进入其所在目录

例:trainer.py要调用data_loader.py中的load_trajs函数

--TrajGDM

    |--runners

          |--trainer.py

    |--utils

          |--data_loader.py
import sys
sys.path.append("..")
from utils.data_loader import load_trajs

或者

import sys
sys.path.append("../utils")
from data_loader import load_trajs

解决方法2:创建新项目,将调用程序与被调用程序放在同一项目中

pycharm会自动生成 .idea__pycache__两个文件夹,模块的调用与此有关,然后在程序中直接调用自定义的模块就可以了。

__pycache__是什么

  • __pycache__是出现在python3.2版本之后的特性,专门存放python编译文件和源文件
  • python2.X版本是没有__pycache__文件夹的,编译文件和源文件存放同目录
  • 如果当前目录只有运行的脚本main一个文件,执行python文件,则不会生成__pycache__
  • 如果当前main文件中没有import自定义模块,只import自带第三方库,不会产生__pycache__
  • __pycache__文件中是与py文件同名的以.cpython-37.pyc结尾的文件。(cpython代表c语言实现的python解释器,37代表3.7版本,pyc文件相当于python的编译文件,执行速度快于py文件)
  • 意义:第一次执行代码的时候,python解释器已经把编译的字节码放在__pycache__文件夹中,这样以后再次运行的话,如果被调用的模块未发生改变,那就直接跳过编译这一步,直接去__pycache__文件夹中去运行相关的*.pyc文件,大大缩短了项目运行前的准备时间。

参考文献:

[1]调用自定义模块出现ModuleNotFoundError: No module named ‘XXX‘的解决方案_modulenotfounderror: no module named 'art.classifi-CSDN博客

[2]涨知识——pyhton中__pycache__的产生与用途_python2.x pycache-CSDN博客

posted @ 2024-07-03 17:26  SanTuan  阅读(360)  评论(0)    收藏  举报