gpt4 book ai didi

virtualenv - 如何在 cd 进入目录时自动激活 virtualenvs

转载 作者:行者123 更新时间:2023-12-03 14:47:47 30 4
gpt4 key购买 nike

我的 ~/Documents 中有一堆项目.我几乎只在 python 中工作,所以这些基本上都是 python 项目。每一个,例如~/Documents/foo有自己的 virtualenv,~/Documents/foo/venv (他们总是被称为 venv)。每当我在项目之间切换时(每天大约 10 次),我都会这样做

deactivate
cd ..
cd foo
source venv/bin/activate

我已经厌倦了打字 deactivatesource venv/bin/activate . 我正在寻找一种方法来 cd ../foo并为我处理 virtualenv 操作。
  • 我熟悉 VirtualEnvWrapper在我看来,这有点严厉。据我所知,它似乎将您所有的 virtualenvs 移动到其他地方,并且增加了比它删除的更多的复杂性。 (欢迎不同意见!)
  • 我对 shell 脚本不太熟悉。如果你能推荐一个低维护的脚本添加到我的 ~/.zshrc做到这一点,这就足够了,但是从一些快速的谷歌搜索中,我还没有找到这样的脚本。
  • 我是zsh/ oh-my-zsh 用户。 oh-my-zsh似乎没有这个插件。这个问题的最佳答案是有人贡献了 oh-my-zsh执行此操作的插件。 (如果这里的答案乏善可陈,我可能会这样做。
  • 最佳答案

    把这样的东西放在你的 .zshrc 中

    function cd() {
    if [[ -d ./venv ]] ; then
    deactivate
    fi

    builtin cd $1

    if [[ -d ./venv ]] ; then
    . ./venv/bin/activate
    fi
    }

    编辑 :如评论中所述 cd - 进入当前虚拟环境的子文件夹将停用它。一种想法可能是仅在 cd 时才停用当前环境- 进入一个新的,比如
    function cd() {
    builtin cd $1

    if [[ -n "$VIRTUAL_ENV" && -d ./venv ]] ; then
    deactivate
    . ./venv/bin/activate
    fi
    }

    这仍然可以改进,也许把它变成一个“提示命令”或 attempting some prefix matching在文件夹名称上检查路径上某处是否存在虚拟环境,但我的 shell-fu 不够好。

    关于virtualenv - 如何在 cd 进入目录时自动激活 virtualenvs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45216663/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com