如何在 pyenv 中创建一个 post virtualenv 钩子来升级 pip 包

How can I make a post virtualenv hook in pyenv to upgrade pip packages

我正在使用 pyenv to manage different Python versions on my machine, and pyenv-virtualenv 来管理我的静脉。当我使用 pyenv virtualenv foo 之类的东西创建新的 venv 时,它不会将最新版本的 pipsetuptoolswheel 安装到 venv 中。我想在每个 venv 创建后 运行 pip install --upgrade pip setuptools wheel 里面。

pyenv 有命令前后挂钩的概念。我可以通过添加以下文件

来运行这个命令

~/.pyenv/plugins/pyenv-virtualenv/etc/pyenv.d/virtualenv/after.bash

内容如下

after_virtualenv 'pip install --upgrade pip setuptools wheel'

命令是运行,但是在venv里面不是运行,所以直接用当前的pip。如何在 after_virtualenv 挂钩的 venv 中调用此命令?

好的,我想通了,您可以将刚创建的 virtualenv 名称指定为 PYENV_VERSION 并调用 pyenv-exec.

upgrade_packages() {
  PYENV_VERSION=$VIRTUALENV_NAME pyenv-exec pip install --upgrade pip setuptools wheel
}

after_virtualenv 'upgrade_packages'