wim*_*wim 22 python pip virtualenv virtualenvwrapper python-wheel
如何控制pip新创建的virtualenv中使用的版本?我相信我已经从操作系统中消除了所有其他版本的pip,但仍然mkvirtualenv从某个地方获得了一个pip-1.5!我希望它在virtualenv中使用pip 1.4.1.
__PRE__
KFu*_*unk 15
对我来说,我刚刚在我的机器上升级了pip/virtualenv/virtualenvwrapper(不在virtualenv中).随后创建的virtualenvs有更新版本.
deactivate
pip install --upgrade pip virtualenv virtualenvwrapper
mkvirtualenv ...
Run Code Online (Sandbox Code Playgroud)
Sam*_*eld 13
从阅读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)
Run Code Online (Sandbox Code Playgroud)
您也可以传递该--no-pip选项,然后从源代码安装所需的版本.
在virtualenv 1.11中,它查找一个wheel文件(例如pip-*.whl)而不是a tar.gz,但除此之外它的行为方式相同(感谢@wim进行更新).
blu*_*Cat 10
您不能使用 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
Run Code Online (Sandbox Code Playgroud)
这将允许您继续使用--process-dependency-links在 pip 19 中删除的内容。
替换安装在虚拟环境中的 pip 很容易。在您的虚拟环境活动中,只需执行以下命令:
pip install pip==1.4.1
Run Code Online (Sandbox Code Playgroud)
自 Python 3.9 起,stdlibvenv模块具有EnvBuilder.upgrade_dependencies. 不幸的是,它有两个缺点:
最好直接安装最新版本!CLIvenv提供了一个--without-pip在这里有用的参数。您可以使用它来选择退出供应商的 pip,然后实际使用供应商的 pip 轮来安装您所需的 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
}
Run Code Online (Sandbox Code Playgroud)
正如所写的,这个函数只是从索引中提取最新的pip、、setuptools和wheel。要强制使用特定版本,您只需更改 shell 脚本的这一行:
.venv/bin/python $whl/pip install --upgrade pip setuptools wheel
Run Code Online (Sandbox Code Playgroud)
以此为例:
.venv/bin/python $whl/pip install pip==19.3.1
Run Code Online (Sandbox Code Playgroud)
对于 Python 2.7 用户,您可以执行类似的技巧,因为在、和virtualenv中提供了类似的命令行选项,并且自 Python 2.7.9 以来仍然有一个供应商的 pip 轮可用于引导。Pathlib 将不可用,因此您需要将用法更改为+ 。--no-pip--no-setuptools--no-wheelpathlibos.pathglob