Como fazer com que o “python -m venv” instale diretamente a versão mais recente do pip

Como parte da etapa de compilação de uma nova versão python, busco e corroget-pip.py, para ter o pip mais recente instalado ao lado do executável python:

$ /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)

Eu tenho 25 dessas versões em/opt/python, embora eu use principalmente as cinco versões mais recentes de cada versão major.minor que não é EOL. Para configurar um invorment eu costumava executarvirtualenv Ou meuvirtualenvutils com o-p /opt/python/X.Y.Z/bin/python opção para obter um ambiente virtual com uma versão específica.

Com o Python 3.7, isso fornece o aviso de descontinuação do módulo 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.

Tenho pouca esperança de que isso seja resolvido no virtualenv, pois isso teve umPendingDeprecationWarning pelo menos desde 2014 (como pode ser visto na saída emessa questão)

Ao investigar a substituiçãovirtualenv compython -m venv novirtualenvutils, Eu criei um novovenv ambiente virtual baseado em mão:

$ /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)

Que tem um velhopip versão! Se você usá-lo, receberá:

Você está usando o pip versão 10.0.1, no entanto, a versão 18.0 está disponível.
Você deve considerar a atualização através do comando 'pip install --upgrade pip'

No ambiente virtual criado comvirtualenv você obtém imediatamente a versão mais recente:

$ /tmp/py37virtualenv/bin/pip --version
pip 18.0 from /tmp/py37virtualenv/lib/python3.7/site-packages/pip (python 3.7)

Eu posso executar uma etapa de pós-criação:

/tmp/py37venv/bin/pip install -U --disable-pip-version-check pip 

o que levará tempo extra. E se houver alguma atualização de segurança parapip, isso implicaria executar a versão não segura para obter uma versão segura, um ponto de ataque ideal.

Devirtualenvutils é trivial executar as várias etapas para criar umpip-less virtualenv e adicionepip usandoget-pip.py. Na linha de comando, isso não é tão simples:

$ /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

pip 18.0 de /opt/python/3.7.0/lib/python3.7/site-packages/pip (python 3.7)

O que está causando/opt/python/3.7.0/bin/python -m venv pegar aquele velhopip versão? Essa versão está disponível quando o 3.7.0 foi lançado?

Como posso atualizar minha instalação em/opt/python/3.7.0 de alguma forma, para que usando/opt/python/3.7.0/bin/python -m venv cria um virtualenv com o mais recentepip versão sem reverter para scripts, aliases ou usar vários comandos? Tendo o mais recentepip instalado sob/opt/python/3.7.0 obviamente não é suficiente.

Existem duas rodas empacotadas:

/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

Eu suspeito que preciso atualizá-los. Existe uma maneira melhor do que atualizá-los manualmente? Alguma opção para/some/python -m venv seria bom.

(E correndo/some/python -m ensurepip --upgrade não faz o truque)

Executando o Reprovado/opt/python/3.7.0/bin/pyvenv tem o mesmo velhopip problema de versão.

questionAnswers(1)

yourAnswerToTheQuestion