python 包含虚拟环境venv项目的移动
在ubuntu环境下,移动一个包含venv虚拟环境的项目后,在执行时会报错:
错误1:
Traceback (most recent call last):File "app.py", line 2, in <module>from flask import Flask, request, make_response
ImportError: No module named flask
错误原因
venv/bin/flask文件中的解释器路径是不存在的。同样解释器路径不同有venv/bin/pip。
用下命令来查看程序解释器路径:
grep -rn "venv/bin/.*" venv/bin/
替换解释器脚本
替换之前,请备份你的项目!!
可以用下面的脚步来进行一个替换操作。该脚本文件replace_venv_path.sh放在项目的目录下
#!/bin/bash
## replace_venv_path.shvenv_path=venv# old_venv_path_patten="\/home\/vk\/PycharmProjects\/flaskBookshelf\/venv"
# new_venv_path_patten="\/mnt\/extdisk1\/Documents\/python_exmaple\/PycharmProjects\/flaskBookshelf\/venv"
# $1: old_venv_path_patten
# $2: new_venv_path_patten
function replace_venv_path()
{strexe="sed -i 's/${1}/${2}/g' `grep -rl "${1}"`"echo $strexeecho "==="eval $strexe
}venv_realpath=`realpath ${venv_path}`
echo "new_venv_path: ${venv_realpath}"new_venv_path=$venv_realpath# 根据pip文件的第一行得到old_venv_path
function get_old_venv_path()
{first_line=`cat $venv_path/bin/pip | sed -n '1,1p'`# echo "first_line: ${first_line}"tmp=${first_line:2}# echo "tmp: $tmp"old_venv_path_tmp=${tmp%\/bin\/python}echo $old_venv_path_tmp
}old_venv_path=`get_old_venv_path`echo "---"
echo "old_venv_path: ${old_venv_path}"
echo "new_venv_path: ${new_venv_path}"patten_old=${old_venv_path//\//\\\/}
patten_new=${new_venv_path//\//\\\/}echo "patten_old: ${patten_old}"
echo "patten_new: ${patten_new}"pushd $venv_path/bin
replace_venv_path $patten_old $patten_new
popd