autoenv甚至在子文件夹中执行

时间:2014-04-03 13:54:48

标签: python virtualenv

我使用autoenv进行自动virtualenv激活。 Python项目的顶级文件夹包含.env文件,其中包含以下内容

source venv/bin/activate

只要cd到项目的任何子文件夹,就会执行此命令。然后抛出

-bash: venv/bin/activate: No such file or directory

失败了,因为它试图相对于子文件夹执行activate。为什么它甚至在子文件夹中执行?如何解决这个问题?

2 个答案:

答案 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将打开和关闭工作区,但至少它很简单,非常清楚发生了什么。