产生问题的原因:IDE(pycharm)没有将自定义模块所在目录添加到工作目录中,导致在搜索目录中找不到要调用的模块。
Python会在以下路径中搜索它想要寻找的模块:
- 程序所在的文件夹
- 标准库的安装路径
- 操作系统环境变量PYTHONPATH所包含的路径
解决方法1:在调用自定义模块前先将自定义模块/想要调用的函数所在的目录添加到工作目录中
例: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文件,大大缩短了项目运行前的准备时间。