控制 virtualenv 中的 pip 版本

新手上路,请多包涵

如何控制新创建的 venv pip 使用的 --- 的版本?

默认情况下,它使用销售的 pip 发行版,该发行版可能已过时或因任何其他原因不适合。我希望能够创建一个 venv 最初 安装了用户指定版本的 pip,而不是创建一个然后从环境中升级 pip 安装。

原文由 wim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 888
2 个回答

从 Python 3.9 开始,stdlib venv 模块有 EnvBuilder.upgrade_dependencies 。不幸的是,它有两个缺点:

  • 不会真正帮助用户安装 特定 的 pip 版本,只能是最新的。
  • 它仍然首先安装销售的 pip 和 setuptools 版本,然后在它们过时时卸载它们,它们几乎总是在实践中。

最好直接安装最新版本! venv CLI 提供了一个在这里很有用的 --without-pip 参数。您可以使用它来选择退出 vendored pip,然后实际使用 vendored pip wheel 来安装您想要的 pip 版本(以及您在新创建的虚拟环境中可能需要的任何其他包)。

最好将它放入函数中 - 这会进入您的 shell 配置文件或 rc 文件:

 function ve() {
    local py="python3"
    if [ ! -d ./.venv ]; then
        echo "creating venv..."
        if ! $py -m venv .venv --prompt=$(basename $PWD) --without-pip; then
            echo "ERROR: Problem creating venv" >&2
            return 1
        else
            local whl=$($py -c "import pathlib, ensurepip; [whl] = pathlib.Path(ensurepip.__path__[0]).glob('_bundled/pip*.whl'); print(whl)")
            echo "boostrapping pip using $whl"
            .venv/bin/python $whl/pip install --upgrade pip setuptools wheel
            source .venv/bin/activate
        fi
    else
        source .venv/bin/activate
    fi
}

如所写,此函数仅从索引中提取最新的 pipsetuptoolswheel 。要强制执行特定版本,您只需更改 shell 脚本的这一行:

 .venv/bin/python $whl/pip install --upgrade pip setuptools wheel

例如:

 .venv/bin/python $whl/pip install pip==19.3.1

For Python 2.7 users, you may do a similar trick because virtualenv provides similar command-line options in --no-pip , --no-setuptools , and --no-wheel ,并且 自 Python 2.7.9 以来,仍然有一个销售的 pip wheel 可用于引导程序。 Pathlib 将不可用,因此您需要将 pathlib 用法更改为 os.path + glob

原文由 wim 发布,翻译遵循 CC BY-SA 4.0 许可协议

对我来说,我只是在我的机器上升级了 pip/virtualenv/virtualenvwrapper(不在 virtualenv 中)。随后创建的 virtualenvs 具有更新版本。

 deactivate
pip install --upgrade pip virtualenv virtualenvwrapper
mkvirtualenv ...

原文由 KFunk 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题