代码之家  ›  专栏  ›  技术社区  ›  Anthon

如何让“python-m venv”直接安装最新的pip版本

  •  7
  • Anthon  · 技术社区  · 6 年前

    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)
    

    /opt/python ,尽管我大部分使用的是每个主要版本的五个最新版本,而不是EOL。设置一个我曾经运行的环境 virtualenv virtualenvutils -p /opt/python/X.Y.Z/bin/python 选项以获取具有特定版本的虚拟环境。

    $ 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 this question )

    在调查替换时 虚拟人 python -m venv 在里面 ,我首先创建了一个新的 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'命令进行升级

    在使用创建的虚拟环境中 您将立即获得最新版本:

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

    皮普 ,这意味着运行非安全版本以获取安全版本,这是理想的攻击点。

    虚拟人 创建一个 皮普 皮普 使用 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
    

    pip 18.0来自/opt/python/3.7.0/lib/python3.7/site-packages/pip(python3.7)

    是什么原因 /opt/python/3.7.0/bin/python -m venv 带走那个老家伙 皮普 版本?这是3.7.0发布时的版本吗?

    如何在下面更新我的安装 /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 有同样的老 皮普 版本问题。

    1 回复  |  直到 5 年前
        1
  •  3
  •   Irving Moy    5 年前

    我用 upgrade-ensurepip 更新这些 pip setuptools ensurepip 包裹。没有升级的优雅 保证 皮普

    https://pypi.org/project/upgrade-ensurepip/

        2
  •  4
  •   Sraw    6 年前

    这是一种预期的行为。 python -m venv 电话 python -m ensurepip 安装 pip This answer 表明 ensurepip 即使使用 --upgrade 选择。没有任何官方选项来更新捆绑包 setuptools .

    1. 使用 pipenv . 真是太好了!而且它将成为下一代的官方包管理器(尽管目前的Pypi结构存在一个很大的问题)。简而言之,包管理器只能决定下载整个包时的依赖关系。这给建立依赖关系图带来了巨大的困难。

    2. EnvBuilder ,实际上有一个 official example 关于这个。在这个例子中,它还使用 get-pip.py 皮普 .