30

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

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

4

6 回答 6

16

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

deactivate
pip install --upgrade pip virtualenv virtualenvwrapper
mkvirtualenv ...
于 2016-05-30T07:36:01.350 回答
15

通过阅读 virtualenv 的源代码,看起来 pip 是从 virtualenv 包含的源 tarfile 安装的。在 virtualenv 1.10.1 中,它pip-1.4.1.tar.gz位于site-packages/virtualenv_support目录中(它setuptools来自同一个地方)。您可以替换该存档以控制版本;virtualenv.py,至少我拥有的版本,并不关心存在哪个版本的 pip:

    if not no_pip:
        install_sdist('Pip', 'pip-*.tar.gz', py_executable, search_dirs)

您也可以传递该--no-pip选项,然后从源代码安装您想要的版本。

在 virtualenv 1.11 中,它会寻找一个 wheel 文件(例如pip-*.whl)而不是 a tar.gz,但除此之外它的行为方式相同(感谢@wim 的更新)。

于 2014-01-13T22:15:20.477 回答
11

您不能使用 pip降级pip,解决方案是在您的虚拟环境中安装特定版本:

virtualenv env -p python3.6 --no-pip
source env/bin/activate
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py pip==18.1

这将允许您继续使用--process-dependency-links在 pip 19 中删除的内容。

于 2019-02-14T08:47:22.410 回答
5

更换安装在虚拟环境中的 pip 很容易。在您的虚拟环境中,只需执行以下命令:

pip install pip==1.4.1
于 2014-01-13T19:04:15.863 回答
1

venvstdlib模块的新增功能是EnvBuilder.upgrade_dependencies. 然而,它并没有venv在 3.8.0 版本中及时进入命令行界面。

不幸的是,它不会真正帮助用户安装特定的pip 版本,只能安装最新版本。

一切都没有丢失!venvCLI 确实提供了一个--without-pip在这里有用的参数。您可以使用它来选择退出供应商 pip,然后实际使用供应商 pip 轮来安装所需的 pip 版本(以及在新创建的虚拟环境中可能需要的任何其他包)。这有点令人费解,所以最好把它放到一个 shell 函数中——这会进入你的 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
}

正如所写,这个函数只是从索引中提取最新pipsetuptools、、和。wheel要强制使用特定版本,您只需更改 shell 脚本的这一行:

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

对此,例如:

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

对于 Python 2.7 用户,您可以使用类似的技巧,因为在 、 和virtualenv中提供了类似的命令行选项--no-pip--no-setuptools并且自 Python 2.7.9 以来--no-wheel仍然有一个供应商提供的可用于引导的 pip 轮。Pathlib 将不可用,因此您需要将用法更改为+ 。pathlibos.pathglob

于 2019-11-08T23:39:07.553 回答
-1

TLDR

python -m pip install --upgrade pip==<target version number>

例子

在虚拟环境中从降级pip 20.3到从降级。pip 19.3

(env) $ pip --version
pip 20.3.1

(env) $ python -m pip install --upgrade pip==19.3          # downgrading
Collecting pip==19.3
  Using cached pip-19.3-py2.py3-none-any.whl (1.4 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.3.1
    Uninstalling pip-20.3.1:
      Successfully uninstalled pip-20.3.1
Successfully installed pip-19.3

(env) $pip --version                                                                     trex@Tobiahs-MacBook-Pro
pip 19.3 
于 2021-01-11T22:37:23.890 回答