如何获取“ python -m venv”以直接安装最新的pip版本
问题内容:
作为新python版本的编译步骤的一部分,我获取并运行get-pip.py
,以在python可执行文件旁边安装最新的pip:
$ /opt/python/3.7.0/bin/python --version
Python 3.7.0
$ /opt/python/3.7.0/bin/pip --version
pip 18.0 from /opt/python/3.7.0/lib/python3.7/site-packages/pip (python 3.7)
我下有25个这样的版本/opt/python
,尽管我主要使用每个major.minor版本的五个最新版本,而不是EOL。要设置环境,我曾经运行过,virtualenv
或者virtualenvutils
可以-p /opt/python/X.Y.Z/bin/python
选择获取具有特定版本的虚拟环境。
使用Python 3.7时,会给出imp模块弃用警告:
$ virtualenv -p /opt/python/3.7.0/bin/python /tmp/py37virtualenv
Running virtualenv with interpreter /opt/python/3.7.0/bin/python
Using base prefix '/opt/python/3.7.0'
/opt/util/virtualenvutils/lib/python3.6/site-packages/virtualenv.py:1041: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
New python executable in /tmp/py37virtualenv/bin/python
Installing setuptools, pip, wheel...done.
我几乎没有希望在virtualenv中解决此问题,因为PendingDeprecationWarning
至少从2014年开始就已经解决了(从该问题的输出中可以看出)
在研究用in进行替换virtualenv
时,我首先手动创建了一个基于新的虚拟环境:python -m venv``virtualenvutils``venv
$ /opt/python/3.7.0/bin/python -m venv /tmp/py37venv
$ /tmp/py37venv/bin/pip --version
pip 10.0.1 from /tmp/py37venv/lib/python3.7/site-packages/pip (python 3.7)
那是旧pip
版本!如果使用它,您将获得:
您正在使用pip版本10.0.1,但是版本18.0可用。
您应该考虑通过“ pip install –upgrade pip”命令进行升级
在virtualenv
您创建的虚拟环境中,立即获得最新版本:
$ /tmp/py37virtualenv/bin/pip --version
pip 18.0 from /tmp/py37virtualenv/lib/python3.7/site-packages/pip (python 3.7)
我可以运行创建后的步骤:
/tmp/py37venv/bin/pip install -U --disable-pip-version-check pip
这将花费额外的时间。并且,如果存在针对的一些安全更新pip
,则意味着将运行非安全版本以获取安全版本,这是理想的攻击点。
从virtualenvutils
它是容易做到的多个步骤来创建一个pip
稀少的virtualenv,然后添加pip
使用get- pip.py
。从命令行开始,这不是那么简单:
$ /opt/python/3.7.0/bin/python -m venv --without-pip /tmp/py37venvnopip
$ /tmp/py37venvnopip/bin/python -c "from urllib.request import urlopen; response = urlopen('https://bootstrap.pypa.io/get-pip'); open('/tmp/tmp_get_pip.py', 'w').write(response.read())"
$ /opt/python/3.7.0/bin/python /tmp/tmp_get_pip.py
......
$ /opt/python/3.7.0/bin/pip --version
来自/opt/python/3.7.0/lib/python3.7/site-packages/pip的pip 18.0(python 3.7)
是什么导致/opt/python/3.7.0/bin/python -m venv
采用该旧pip
版本?该版本在3.7.0发布时可用吗?
如何/opt/python/3.7.0
以某种方式更新我的安装,以便使用来/opt/python/3.7.0/bin/python -m venv
创建具有最新pip
版本的virtualenv而不恢复脚本,别名或使用多个命令?仅pip
安装最新的文件/opt/python/3.7.0
显然不够。
有两个捆绑的轮子:
/opt/python/3.7.0/lib/python3.7/ensurepip/_bundled/setuptools-39.0.1-py2.py3-none-any.whl
/opt/python/3.7.0/lib/python3.7/ensurepip/_bundled/pip-10.0.1-py2.py3-none-any.whl
我怀疑我需要更新那些。有没有比手动更新更好的方法?一些选择/some/python -m venv
将是不错的。
(运行/some/python -m ensurepip --upgrade
并不能解决问题)
运行已弃用/opt/python/3.7.0/bin/pyvenv
的pip
版本具有相同的旧版本问题。
问题答案:
我使用upgrade- ensurepip
更新包中的那些文件pip
和setuptools
轮文件ensurepip
。它不如可以ensurepip
通过进行升级那样优雅pip
,但是仍然比手动进行升级更可取。
https://pypi.org/project/upgrade-
ensurepip/