目录
注意
这个问题是有前提条件的,如题目中注明,云端环境明明有这个包却还报错。如果没有这个前提条件。只是简单的报错,直接 pip install *** 就行。
问题描述:
我想执行一下模型的训练过程,其启动程序定义在脚本文件 train.py 中。在远程服务器已经配置好了环境,而且在远程服务器的终端执行 train.py 时
python tracking/train.py --script artrack --config artrack_256_full --save_dir ./output --mode single
没有什么问题。我想在本地的编译器中debug一下,将上面传入的参数在pycharm中,对train.py中进行了配置
运行后就出现了题目中的错误。
ModuleNotFoundError: No module named '***'
此时在 终端的环境中 pip list 一下,发现没什么问题,存在这个包,而且在终端运行一切正常,并没有报错,哎,什么情况?
问题原因
在train.py 脚本文件中,发现
if args.mode == "single":
train_cmd = "python /root/data/zjx/Code-subject/ARTrack/ARTrack-main/lib/train/run_training.py --script %s --config %s --save_dir %s --use_lmdb %d " \
"--script_prv %s --config_prv %s --distill %d --script_teacher %s --config_teacher %s --use_wandb %d"\
% (args.script, args.config, args.save_dir, args.use_lmdb, args.script_prv, args.config_prv,
args.distill, args.script_teacher, args.config_teacher, args.use_wandb)
#
os.system(train_cmd)
这里利用 os.system 来执行 run_train.py 脚本命令,这就出现了问题。在远程服务器终端执行 train.py 时,os.system 所在的服务器环境是云端的环境,而在本地编译器执行 train.py时, os.system会在本地的环境下创建子进程。所以由于 train.py 脚本中使用了 os.system 这一函数,导致这之后的 代码是在 本地的环境 下执行的。这就造成了矛盾,使得远程和本低发生冲突,除了题目中的问题外,还会发生其它问题,远程的一些模块会被冻结或者禁止访问。
在远程服务器终端查看一下环境中的包
# pip listPackage Version
------------------------ --------------------
astor 0.8.1
certifi 2023.11.17
cffi 1.16.0
charset-normalizer 3.3.2
click 8.1.7
configparser 5.2.0
contourpy 1.2.0
cycler 0.12.1
Cython 3.0.7
data