系统 pip 可以将模块安装到创建的 venv --without-pip 中吗?

Kim*_*lor 5 python pip virtualenv

在 Cygwin / Windows 7 上使用 python 3.4.3 和 pip 8.1.2。

我想维护一个更新的系统范围的 pip,而不是必须为每个新的 venv 安装和升级它。

捆绑的点在其他方面已经过时了:

$ python3 -c 'import ensurepip; print(ensurepip.version())'
6.0.8
Run Code Online (Sandbox Code Playgroud)

我不想维护除 pip 之外的任何系统范围模块,而是所有依赖项都应该放在 venv 中。

我试过了:

$ pyvenv-3.4 --without-pip venv
$ source venv/bin/activate
(venv) $ which pip python
/usr/bin/pip
$HOME/venv/bin/python
Run Code Online (Sandbox Code Playgroud)

这正是我所期望的。但是之后:

(venv) $ export PIP_REQUIRE_VIRTUALENV=true
(venv) $ pip show pip
Could not find an activated virtualenv (required).
Run Code Online (Sandbox Code Playgroud)

这是相当令人困惑的。

(venv) $ PIP_REQUIRE_VIRTUALENV= pip show pip
---
Metadata-Version: 2.0
Name: pip
Version: 8.1.2
[...]
Run Code Online (Sandbox Code Playgroud)

如果我禁用 PIP_REQUIRE_VIRTUALENV 并运行 pip install MODULE,pip 将运行,但 MODULE 会安装在我的系统站点包中,而不是安装在 venv 下。

我确实通过使用 --system-site-packages 找到了解决方法:

$ pyvenv-3.4 --without-pip --system-site-packages venv
$ source venv/bin/activate
(venv) $ export PIP_REQUIRE_VIRTUALENV=true
(venv) $ python -c 'import pip; pip.main()' show pip
---
Metadata-Version: 2.0
Name: pip
Version: 8.1.2
Run Code Online (Sandbox Code Playgroud)

我宁愿不冒险从系统范围的模块中泄漏需求。有更容易的方法吗?我期望系统 pip '尊重我的 venv' 是错误的吗?

这里有一个关于使用 PIP_RESPECT_VIRTUALENV 和/或 --respect-virtualenv 的类似问题,但是,我在当前的 pip 源中没有发现任何相关内容。

gav*_*koa 0

我也不想安装更新版本的pipto venv,所以使用了--without-pip. 但最初我想重用系统中的一些二进制模块,因此我创建了 venv:

# mkdir ~/.venv

# pip index versions ansible
ansible (7.3.0)

# python3 -m venv --without-pip --system-site-packages ansible-7.3.0
Run Code Online (Sandbox Code Playgroud)

pip不在 中~/.venv/.../bin,系统pip告诉无法安装到系统目录,因此安装到用户目录 ( ~/.local/share/)。

有一种方法可以pip通过在 venv 中将其作为模块运行来使用 venv(由于--system-site-packages):

python -m pip install --require-virtualenv ansible==7.3.0
Run Code Online (Sandbox Code Playgroud)