在Cygwin / Windows 7上使用python 3.4.3和pip 8.1.2。
我想维护一个更新的系统范围点,而不是为每个新的venv安装和升级它。
捆绑的点子已经过时了:
$ python3 -c 'import ensurepip; print(ensurepip.version())'
6.0.8
我不想维护除pip之外的任何系统范围的模块,而是所有依赖关系都应该存在于venv中。
我试过了:
$ pyvenv-3.4 --without-pip venv
$ source venv/bin/activate
(venv) $ which pip python
/usr/bin/pip
$HOME/venv/bin/python
这是我的期望。 但那时:
(venv) $ export PIP_REQUIRE_VIRTUALENV=true
(venv) $ pip show pip
Could not find an activated virtualenv (required).
这非常令人困惑。
(venv) $ PIP_REQUIRE_VIRTUALENV= pip show pip
---
Metadata-Version: 2.0
Name: pip
Version: 8.1.2
[...]
如果我禁用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
我宁愿不从系统范围的模块中泄漏需求。有没有更简单的方法?我错误地期望系统点“尊重我的venv”吗?
有关使用PIP_RESPECT_VIRTUALENV和/或--respect-virtualenv的类似question here,但我发现当前的pip源没有任何相关内容。