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放在项目的目录下。
根据情况脚本中venv_path变量。
#!/bin/bash
## replace_venv_path.sh
venv_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 $strexe
echo "==="
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
5450

被折叠的 条评论
为什么被折叠?



