某天一直困惑于这样一个问题:同样的工程,同样的代码,使用pydev可以运行任意一个python脚本,而使用命令行运行却不行?命令行下(或者双击执行)总是提示“ImportError: No module named xxx”?pydev究竟做了什么魔术呢?
因此,我认为是路径的问题,所以我做个简单的验证,在此记录以下。
我在终端和pycharm中的/home/ty/ultralytics/ultralytics 路径下建立一个train.py 文件。
放入如下打印集成开发环境和cmd能够扫描到的路径。
import sys
print(sys.path)
首先在开发环境中直接运行,打印结果如下:
['/home/ty/ultralytics/ultralytics', '/home/ty/ultralytics',
'/home/ty/anaconda3/envs/yolo2/lib/python38.zip',
'/home/ty/anaconda3/envs/yolo2/lib/python3.8',
'/home/ty/anaconda3/envs/yolo2/lib/python3.8/lib-dynload',
'/home/ty/.local/lib/python3.8/site-packages',
'/home/ty/.local/lib/python3.8/site-packages/kernelconv2d_cuda-1.0.0-py3.8-linux-x86_64.egg',
'/home/ty/anaconda3/envs/yolo2/lib/python3.8/site-packages']
其次在cmd终端运行,打印结果如下:
['/home/ty/ultralytics/ultralytics',
'/home/ty/anaconda3/envs/yolo2/lib/python38.zip',
'/home/ty/anaconda3/envs/yolo2/lib/python3.8',
'/home/ty/anaconda3/envs/yolo2/lib/python3.8/lib-dynload',
'/home/ty/.local/lib/python3.8/site-packages',
'/home/ty/.local/lib/python3.8/site-packages/kernelconv2d_cuda-1.0.0-py3.8-linux-x86_64.egg',
'/home/ty/anaconda3/envs/yolo2/lib/python3.8/site-packages']
非常清晰的能够看见,在第一行有差别,终端只有/home/ty/ultralytics/ultralytics。这就说明终端只能够扫描当前执行的文件所在的目录,而开发环境中会扫描他的副目录。
这就导致了一些模块难以被扫描到。
解决办法
所以终端执行的时候在开发环境中加入相应的环境就行。 语句如下:
import sys
sys.path.append("/home/ty/ultralytics")