pythonpippython-venv

I keep getting a message to upgrade pip


Whenever I create a venv, I get a message asking me to upgrade pip:

You are using pip version 9.0.1, however version 18.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

I can upgrade the Pip in that venv fine, after which it is up to date:

C:\Users\mkupfer\Python-Sandbox\sibc-python-scripts>pip --version
pip 18.0 from c:\users\mkupfer\appdata\local\programs\python\python36-32\lib\sit
e-packages\pip (python 3.6)

C:\Users\mkupfer\Python-Sandbox\sibc-python-scripts>pip3 --version
pip 18.0 from c:\users\mkupfer\appdata\local\programs\python\python36-32\lib\sit
e-packages\pip (python 3.6)

C:\Users\mkupfer\Python-Sandbox\sibc-python-scripts>pip3 install --upgrade pip
Requirement already up-to-date: pip in c:\users\mkupfer\appdata\local\programs\p
ython\python36-32\lib\site-packages (18.0)

but if I create another venv, it will have the same issue. How can I make the upgrade permanent? I tried the advice at virtualenv use upgraded system default pip, but it does not solve the problem.


Solution

  • The issue seems to be that new virtual environments are using an old version of pip. Note that pip is installed from a source tarfile (or wheel) included with virtualenv, in the site-packages/virtualenv_support directory.

    $ ls -l /path/to/site-packages/virtualenv_support
    pip-9.1-py2.py3-none-any.whl
    

    A quick way to workaround the problem is to make sure you upgrade pip whenever you create a new virtualenv, like so:

    $ virtualenv venv
    $ venv/bin/pip install -U pip
    

    Alternatively, make sure you have the latest version of virtualenv. According to their release notes, virtualenv==16 is using pip==10.

    $ pip install -U virtualenv
    

    Finally, since virtualenv looks for pip*.whl in virtualenv_support, this will also work:

    $ mv /path/to/site-packages/virtualenv_support/pip*.whl{,bak}
    $ pip wheel -w /path/to/site-packages/virtualenv_support/ 'pip==18'
    

    All new virtualenvs will use the version of pip that you installed into virtualenv_support. However, this feels hacky.

    (Attempted with virtualenv==16. This results in all new virtualenvs with pip==18.)