【问题标题】:How to upgrade pyenv (macOS) such that a fresh .venv contains an up-to-date pip?如何升级 pyenv (macOS) 以使新的 .venv 包含最新的 pip?
【发布时间】:2022-08-24 07:30:17
【问题描述】:

每次创建新的 .venv 时,我都会尝试阻止此警告:

> /Users/pi/.pyenv/versions/3.10.0/bin/python -m venv .venv

> . .venv/bin/activate

> pip install ipykernel  # or anything
WARNING: You are using pip version 21.2.3; however, version 22.2.2 is available.
You should consider upgrading via the \'/Users/pi/code/foo/.venv/bin/python -m pip install --upgrade pip\' command.

不知何故,pyenv 用过时的点数填充了我的新鲜 .venv。

如果我执行建议的命令,它将升级我的 .venv\'s pip。但我不想每次创建 .venv 时都这样做。

我认为这可能会解决它,但它不会:

> /Users/pi/.pyenv/versions/3.10.0/bin/python -m pip install --upgrade pip
Requirement already satisfied: pip in /Users/pi/.pyenv/versions/3.10.0/lib/python3.10/site-packages (22.2.1)
Collecting pip
  Using cached pip-22.2.2-py3-none-any.whl (2.0 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.2.1
    Uninstalling pip-22.2.1:
      Successfully uninstalled pip-22.2.1
Successfully installed pip-22.2.2

当我执行上述命令时实际发生了什么?我期待它更新由 pyenv 创建/维护的 python 版本的 pip。它似乎在做什么:

???? pi@pPro18-4 ~/.pyenv/versions/3.10.0
> find . -name \'pip*\'
./bin/pip3
./bin/pip
./bin/pip3.10
./lib/python3.10/site-packages/pip
./lib/python3.10/site-packages/pip-22.2.2.dist-info

???? pi@pPro18-4 ~/.pyenv/versions/3.10.0
> ./bin/pip --version
pip 22.2.2 from /Users/pi/.pyenv/versions/3.10.0/lib/python3.10/site-packages/pip (python 3.10)

那么为什么当我创建它时这个 pip 没有被复制到我的 .venv 中呢?

我认为这就是 .venv 创建的工作方式。

如何清理我的 pyenv Python 安装以生成最新的 .venvs?

  • 一旦设置了venv,为什么不简单地升级pip?我假设 pip 安装在与该特定版本耦合的任何版本中
  • 这就是我目前所做的。但我创建了很多 .venv-s。更新参考点将是更清洁的做法。我只是不知道该怎么做。

标签: pip python-venv pyenv pyenv-virtualenv


【解决方案1】:

这是pyenv-hooks 的用例

pyenv-hooks 是 pyenv 在运行某些命令时执行的脚本。您可以创建常规的钩子 pyenv 命令,例如:exec、rehash、which、install,但它也可以是插件命令,例如 virtualenv。挂钩脚本可以用任何语言编写。

您可以通过在以下位置创建脚本来创建挂钩:

$PYENV_ROOT/pyenv.d/<hook-name>/<whatever-script-name>

要创建一个升级 pip 和其他一些默认包的钩子,您可以创建一个路径为 $PYENV_ROOT/pyenv.d/virtualenv/after.bash 的新脚本,其内容为:

after_virtualenv 'PYENV_VERSION="$VIRTUALENV_NAME" pyenv-exec pip install --upgrade pip'

after_virtualenv 是告诉pyenv 何时执行以下命令的命令。首先,我们将pyenv 版本设置为我们刚刚创建的virtualenv 的名称。这是由pyenv virtualenv 设置为$VIRTUALENV_NAME. 然后我们升级pip 本身。

更多详情in this article。

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多