autoenv在子文件夹中仍然执行

9 投票
2 回答
1705 浏览
提问于 2025-04-18 01:10

我使用了autoenv这个工具来自动激活virtualenv。我的Python项目的顶层文件夹里有一个.env文件,里面写着以下内容:

source venv/bin/activate

每当我进入项目的任何子文件夹时,这个命令就会被执行。然后就会出现以下错误:

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

失败的原因是它试图在子文件夹中执行activate。为什么即使在子文件夹中也会执行呢?该如何解决这个问题呢?

2 个回答

0

在你的工作区根目录下,有一个 .env 文件,内容是:

test (command -v deactivate) && deactivate

而在你每个相关的项目文件夹里,也需要有:

workon venv_of_project

正如这位朋友所提到的, 这意味着在项目中使用 cd 命令切换目录时,会自动开启和关闭工作区,但至少这样做简单明了,大家都能看得懂发生了什么。

6

今天遇到了这个问题。现在的回答没有提到每次你进入一个子文件夹或者返回根文件夹时,环境都会被激活。通过下面的 .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

撰写回答