问题背景
当我在pycharm运行自己的程序时,非常顺利,但是用python main.py 这种文件运行方式时,就报如下错误:
ModuleNotFoundError: No module named ‘xxx‘
一、问题一
如果错误中提示的模块是你自己写的模块
其原因是,当我们导入一个模块时:import xxx,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中。如果path中没有路径,就会报错。你导入的包或者模块,并不是在当前运行python文件的目录下,所以会报找不到模块的错误。
解决方法
将你要导入的模块目录添加到sys的path中:
import sys
# 获取根目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 将根目录添加到path中
sys.path.append(BASE_DIR)
二、问题二
如果错误中提示的模块是你安装好的第三方模块
这种情况往往是由于运行环境不同导致的,拿我遇到的情况举个例子:
我在项目总导入了 import pymysql,然后在pycharm中也能正常运行,但我用
python main.py 提交,就会报错:
ModuleNotFoundError: No module named ‘pymysql‘
其原因是我们在pycharm中和用文件运行时的python环境不一样
我的pycharm是python3.8
而我在命令行运行时,默认用的时python3.9
所以,我在pycharm安装的第三方库,在python3.9中是没有的
解决方法
运行时直接写出指定python版本的运行命令,例如:
E:\python\python-3.8\python.exe main.py --start_time 20220628 --end_time 20220629