Pip keeps telling me to upgrade pip, even right after upgrading pip

I did not expect pip to tell me to upgrade pip just after pip upgraded pip. And I did not expect pip to give me instructions that didn’t work.

What is this?

  1. Expected outcome.
  2. Bug in 3.14.0rc1. (Let’s tell the devs.)
  3. Bug in pip 25.1.1. (Let’s tell the devs.)
  4. PEBCAK. (Let’s keep it a secret.)

Note well:

  1. For 35 years, I have been cursing at a cmd prompt, and for 26 years, I have refused to ~$:.
  2. I’m not a programmer.

Environment:

hunte@duda:~$ uname -a
Linux duda 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
# Whatever my prior command was fell out of the terminal buffer.
...
The necessary bits to build these optional modules were not found:
_zstd
To find the necessary bits, look in configure.ac and config.log.

Checked 114 modules (36 built-in, 76 shared, 1 n/a on linux-x86_64, 0 disabled, 1 missing, 0 failed on import)
make[1]: Leaving directory '/opt/python/3.14.0rc1-gil'
hunte@duda:/opt/python/3.14.0rc1-gil$ sudo make altinstall
...

Looking in links: /tmp/tmp3ojkx_we
Processing /tmp/tmp3ojkx_we/pip-25.1.1-py3-none-any.whl
Installing collected packages: pip
Successfully installed pip-25.1.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
hunte@duda:/opt/python/3.14.0rc1-gil$ python -V
Python 3.13.5
hunte@duda:/opt/python/3.14.0rc1-gil$ /opt/python/3.14.0rc1-gil/python -V
Python 3.14.0rc1
hunte@duda:/opt/python/3.14.0rc1-gil$ pip --version
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)
hunte@duda:/opt/python/3.14.0rc1-gil$ /opt/python/3.14.0rc1-gil/pip --version
-bash: /opt/python/3.14.0rc1-gil/pip: No such file or directory
hunte@duda:/opt/python/3.14.0rc1-gil$ ls
Android       Lib              Modules   Python             config.guess   iOS                pyconfig.h
Doc           Mac              Objects   README.rst         config.log     install-sh         pyconfig.h.in
Grammar       Makefile         PC        Tools              config.status  libpython3.14.a    python
Include       Makefile.pre     PCbuild   _bootstrap_python  config.sub     platform           python-config
InternalDocs  Makefile.pre.in  Parser    aclocal.m4         configure      profile-run-stamp  python-config.py
LICENSE       Misc             Programs  build              configure.ac   pybuilddir.txt     python-gdb.py
hunte@duda:/opt/python/3.14.0rc1-gil$ /opt/python/3.14.0rc1-gil/python -m pip --version
pip 25.1.1 from /usr/local/lib/python3.14/site-packages/pip (python 3.14)
hunte@duda:/opt/python/3.14.0rc1-gil$ /opt/python/3.14.0rc1-gil/python -m pip install -U pip
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pip in /usr/local/lib/python3.14/site-packages (25.1.1)
Collecting pip
  Downloading pip-25.2-py3-none-any.whl.metadata (4.7 kB)
Downloading pip-25.2-py3-none-any.whl (1.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 2.9 MB/s eta 0:00:00
Installing collected packages: pip
  WARNING: The scripts pip, pip3 and pip3.14 are installed in '/home/hunte/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-25.2

[notice] A new release of pip is available: 25.1.1 -> 25.2
[notice] To update, run: pip3.14 install --upgrade pip
hunte@duda:/opt/python/3.14.0rc1-gil$ /opt/python/3.14.0rc1-gil/python -m pip --version
pip 25.2 from /home/hunte/.local/lib/python3.14/site-packages/pip (python 3.14)
hunte@duda:/opt/python/3.14.0rc1-gil$ pip3.14 install --upgrade pip
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pip in /usr/local/lib/python3.14t/site-packages (25.1.1)
Collecting pip
  Using cached pip-25.2-py3-none-any.whl.metadata (4.7 kB)
Using cached pip-25.2-py3-none-any.whl (1.8 MB)
Installing collected packages: pip
  WARNING: The scripts pip, pip3 and pip3.14 are installed in '/home/hunte/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-25.2

[notice] A new release of pip is available: 25.1.1 -> 25.2
[notice] To update, run: pip3.14 install --upgrade pip
  1. I like that the Linux install seems to attempt to upgrade pip during the installation. (Installing collected packages: pip // Successfully installed pip-25.1.1)
  2. (I struggled to figure out the WWWWH of pip.)
  3. I used my Windows Python knowledge to upgrade pip somewhere. (hunte@duda:/opt/python/3.14.0rc1-gil$ /opt/python/3.14.0rc1-gil/python -m pip install -U pip)
  4. The interpreter told me I am a good boy, “Successfully installed pip-25.2”, and then told me I didn’t do what it had just told me that I had done, “A new release of pip is available: 25.1.1 → 25.2”.
  5. So I followed the instructions, which are not quite the same as in Windows, hunte@duda:/opt/python/3.14.0rc1-gil$ pip3.14 install --upgrade pip, but it still didn’t work.

The relevant line is Defaulting to user installation because normal site-packages is not writeable.

You ran sudo make altinstall, meaning the packages are only writable by the root user. pip then falls back to a user install for pip25.2, this doesn’t actually manage to shadow the system wide install for pip25.1.1, so that is still the version you are getting.

For a personally installed version global version of python, run pip with sudo if you want to update globally installed packages.

1 Like

Or use the distro’s tool, apt or dnf etc, to update the pip package.

I don’t see how that can work if they are using python build from source with make altinstall?

Oh sorry i missed the altinstall.