目录
注意
这个问题是有前提条件的,如题目中注明,云端环境明明有这个包却还报错。如果没有这个前提条件。只是简单的报错,直接 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 0.4
decorator 5.1.1
docker-pycreds 0.4.0
easydict 1.9
einops 0.4.1
filelock 3.13.1
fonttools 4.47.0
formulaic 0.5.2
fsspec 2023.12.2
funcsigs 1.0.2
future 0.18.2
gitdb 4.0.9
GitPython 3.1.27
h5py 3.10.0
idna 3.6
importlib-resources 6.1.1
interface-meta 1.3.0
iopath 0.1.9
Jinja2 3.1.2
jpeg4py 0.1.4
jsonpatch 1.32
jsonpointer 2.3
kiwisolver 1.4.5
latex 0.7.0
libarchive-c 2.9
linearmodels 4.29
lmdb 1.3.0
loguru 0.6.0
MarkupSafe 2.1.3
mat73 0.59
matplotlib 3.8.2
memory-profiler 0.60.0
mpmath 1.3.0
msgpack 1.0.2
mypy-extensions 1.0.0
networkx 3.2.1
ninja 1.11.1
numexpr 2.8.8
numpy 1.26.3
nvidia-cublas-cu12 12.1.3.1
nvidia-cuda-cupti-cu12 12.1.105
nvidia-cuda-nvrtc-cu12 12.1.105
nvidia-cuda-runtime-cu12 12.1.105
nvidia-cudnn-cu12 8.9.2.26
nvidia-cufft-cu12 11.0.2.54
nvidia-curand-cu12 10.3.2.106
nvidia-cusolver-cu12 11.4.5.107
nvidia-cusparse-cu12 12.1.0.106
nvidia-nccl-cu12 2.18.1
nvidia-nvjitlink-cu12 12.3.101
nvidia-nvtx-cu12 12.1.105
opencv-python 4.5.5.64
opencv-python-headless 4.9.0.80
packaging 23.2
pandas 2.1.4
pathtools 0.1.2
patsy 0.5.5
pillow 10.2.0
pip 23.3.1
portalocker 2.8.2
promise 2.3
property-cached 1.6.4
protobuf 3.20.1
psutil 5.9.7
pycocotools 2.0.7
pycparser 2.21
pyhdfe 0.2.0
pyparsing 3.1.1
python-dateutil 2.8.2
pytz 2023.3.post1
PyYAML 6.0.1
pyzmq 25.1.2
requests 2.31.0
scipy 1.11.4
sentry-sdk 1.5.8
setproctitle 1.2.2
setuptools 68.2.2
setuptools-scm 7.1.0
Shapely 1.8.1.post1
shortuuid 1.0.8
shutilwhich 1.1.0
six 1.16.0
smmap 5.0.0
statsmodels 0.14.1
sympy 1.12
tables 3.6.1
tempdir 0.7.1
tensorboardX 2.5.1
termcolor 1.1.0
thop 0.1.0.post2207010342
tikzplotlib 0.10.1
timm 0.5.4
tomli 2.0.1
torch 1.11.0
torchfile 0.1.0
torchvision 0.12.0
tornado 6.4
tqdm 4.66.1
triton 2.1.0
typing_extensions 4.9.0
tzdata 2023.4
urllib3 2.1.0
visdom 0.1.8.9
wandb 0.12.11
webcolors 1.12
websocket-client 1.7.0
wheel 0.41.2
wrapt 1.16.0
yaspin 2.1.0
zipp 3.17.0
再对比一下执行 os.system时环境中的包
(在脚本文件train.py中添加)
os.system('pip list')
执行脚本文件,看到
Package Version
---------------------- ---------------------
absl-py 0.11.0
aiocontextvars 0.2.2
anyio 3.5.0
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
asn1crypto 0.22.0
astor 0.8.1
attrs 21.4.0
Babel 2.9.1
backcall 0.1.0
bleach 3.0.2
botocore 1.11.6
cached-property 1.5.2
cachetools 4.1.1
camera 1.3.0
certifi 2017.7.27.1
cffi 1.14.0
chardet 3.0.4
cloudpickle 0.6.1
colorama 0.3.9
contextvars 2.4
cryptography 2.0.3
cycler 0.10.0
Cython 0.29.28
dask 0.20.2
dataclasses 0.8
decorator 4.3.0
docutils 0.14
easydict 1.9
entrypoints 0.2.3
gast 0.5.3
google-auth 1.23.0
google-auth-oauthlib 0.4.2
google-pasta 0.2.0
grpcio 1.33.2
h5py 3.1.0
idna 2.10
immutables 0.14
importlib-metadata 3.1.0
ipykernel 5.1.0
ipython 7.1.1
ipython-genutils 0.2.0
ipywidgets 7.4.2
jedi 0.13.1
Jinja2 2.10
jmespath 0.9.4
joblib 0.17.0
json5 0.9.6
JsonForm 0.0.2
jsonschema 3.2.0
JsonSir 0.0.2
jupyter 1.0.0
jupyter-client 7.1.2
jupyter-console 6.0.0
jupyter-core 4.9.2
jupyter-server 1.13.1
jupyterlab 3.2.9
jupyterlab-server 2.10.3
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.2
keyring 10.6.0
keyrings.alt 3.0
kiwisolver 1.0.1
loguru 0.6.0
Markdown 3.3.3
MarkupSafe 1.1.1
matplotlib 3.0.0
mistune 0.8.3
msgpack 1.0.0
msgpack-numpy 0.4.7.1
multimethod 1.5
nbclassic 0.3.5
nbconvert 5.3.1
nbformat 4.4.0
nest-asyncio 1.5.4
networkx 2.2
notebook 5.7.2
numpy 1.19.4
oauthlib 3.1.0
opencv-python 4.5.5.62
packaging 21.3
pandas 1.1.5
pandocfilters 1.4.2
parso 0.3.1
pexpect 4.6.0
pickleshare 0.7.5
Pillow 8.0.1
pip 21.3.1
portalocker 2.2.1
prometheus-client 0.4.2
prompt-toolkit 2.0.7
protobuf 3.14.0
psutil 5.7.3
ptyprocess 0.6.0
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycocotools 2.0.4
pycparser 2.21
pycrypto 2.6.1
Pygments 2.2.0
PyGObject 3.26.1
pyOpenSSL 17.2.0
pyparsing 2.2.2
pyrsistent 0.18.0
PySocks 1.6.7
python-apt 1.6.5+ubuntu0.7
python-dateutil 2.8.0
Python-EasyConfig 0.1.7
python-gflags 3.1.2
pytz 2021.3
PyWavelets 1.0.1
pyxdg 0.25
PyYAML 3.13
pyzmq 17.1.2
qtconsole 4.4.2
requests 2.25.0
requests-oauthlib 1.3.0
Resource 0.2.1
rsa 3.4.2
ruamel.yaml 0.11.14
s3transfer 0.1.13
scikit-image 0.14.1
scikit-learn 0.23.2
scipy 1.5.4
SecretStorage 2.3.1
Send2Trash 1.5.0
setuptools 59.6.0
six 1.11.0
sklearn 0.0
sniffio 1.2.0
ssh-import-id 5.7
tabulate 0.8.7
tensorboard 2.4.0
tensorboard-plugin-wit 1.7.0
tensorboardX 2.1
tensorflow-estimator 1.14.0
tensorflow-gpu 1.14.0
tensorpack 0.10.1
termcolor 1.1.0
terminado 0.12.1
testpath 0.4.2
thop 0.0.31.post2005241907
threadpoolctl 2.1.0
toml 0.10.2
toolz 0.9.0
torch 1.8.1+cu102
torchpack 0.2.2
torchvision 0.9.1
tornado 6.1
tqdm 4.53.0
traitlets 4.3.2
typing-extensions 3.7.4.3
unattended-upgrades 0.1
urllib3 1.22
wcwidth 0.1.7
webencodings 0.5.1
websocket-client 1.3.1
Werkzeug 1.0.1
wheel 0.30.0
widgetsnbextension 3.4.2
wrapt 1.13.3
yacs 0.1.8
zipp 3.4.0
这完全不是云端的环境。最后,经过查看 ,发现是本地的 一个 环境。就是 os.system 这个函数引发的问题。
解决办法
跳过使用了 os.system 函数的主脚本文件,在 os.system 执行的脚本命令的文件中去配置参数,从而在该文件中运行即可。
举例:刚才的 os.system 执行的脚本命令 如下
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)
那么,就在
/root/data/zjx/Code-subject/ARTrack/ARTrack-main/lib/train/run_training.py
文件中去配置传入的参数
这样,就可以在本地 debug 训练过程了。