我使用autoenv进行自动virtualenv
激活。 Python项目的顶级文件夹包含.env
文件,其中包含以下内容
source venv/bin/activate
只要cd
到项目的任何子文件夹,就会执行此命令。然后抛出
-bash: venv/bin/activate: No such file or directory
失败了,因为它试图相对于子文件夹执行activate
。为什么它甚至在子文件夹中执行?如何解决这个问题?
答案 0 :(得分:6)
今天有这个问题。当前的答案并没有解决每次cd
进入子文件夹或返回根文件夹时环境被激活的事实。使用以下.env
脚本解决了它:
venv=venv
currentvenv=""
if [[ $VIRTUAL_ENV != "" ]]
then
# Strip out the path and just leave the env name
currentvenv="${VIRTUAL_ENV##*/}"
fi
if [[ "$currentvenv" != "$venv" ]]
then
echo "Switching to environment: $venv"
workon $venv
#else
# echo "Already on environment $venv"
fi
将venv
替换为您的环境名称。您可以取消注释else块,看看它是否每次都尝试激活环境,因为已经激活了所需的环境。
注意:如果您未使用virtualenvwrapper
,则应使用您用于激活虚拟环境的任何命令替换workon
命令。我建议使用virtualenvwrapper
。
答案 1 :(得分:0)
在工作区根目录中,.env
包含:
test (command -v deactivate) && deactivate
并在每个相关的项目文件夹中:
workon venv_of_project
作为this person points out,,这意味着项目中的cd
将打开和关闭工作区,但至少它很简单,非常清楚发生了什么。