This is the first time I am upgrading python (from 3.11.3 to 3.12.0) and some questions came up along the way. I think I have somehow understood how Path works on windows, but am not getting the complete picture right now. At the moment I have the issue, that python and pip still by default use the old python installation, so this led to a few questions:
My understanding is, that the version of pip which is Called is determined by which Path entry of Python\Scripts
is preferred by Windows.
At the moment, python 3.11 and 3.9 are installed into C:\Program Files\
, and their installation path is added to system PATH.
3.12 however is installed to C:\Users\...\AppData\Local\Programs\Python\Python312\
and the installation path is added to user PATH.
Should I just delete the PATH entries directing to python 3.9 and 3.11? Does Windows prefer system path over user path?
In the Scripts directory, I can't find entries for pipx and virtualenv, and there are no seperate entries for pipx and virtualenv in either PATH. How does my Terminal know, where to find the correct executables? Is this managed by pip? And how do I get my system to use the newly installed versions of virtualenv and pipx which use python3.12?
I have some tools installed via pipx, e.g. hatch, mypy, ipython, virtualenv. Do I need to reinstall all of those tools for every python upgrade I make? Or is there a way to tell pipx that I want it to use a new python version now?
System Path:
C:\Program Files\Python311\Scripts\
C:\Program Files\Python311\
C:\Program Files\Python39\Scripts\
C:\Program Files\Python39\
User Path:
C:\Users\UserName\AppData\Local\Programs\Python\Python312\Scripts\
C:\Users\UserName\AppData\Local\Programs\Python\Python312\
C:\Users\UserName\AppData\Local\Programs\Python\Launcher\
C:\users\UserName\appdata\roaming\python\python311\scripts
Through a lot of trial and error I figured it out, maybe it helps some people:
In my case, I needed to remove python 3.9 and 3.11 (especially the Scripts folder, that is where pip.exe is located) from the system path. I also removed 3.11/Scripts from user path.
For my terminal to notice the 3.12 path, I had to relog after installing python 3.12.This seems to be the case with all entries in user path.
If installed through pip
, pipx and virtualenv are specific to the python version they were installed with. So I need to reinstall pipx and virtualenv using the correct version of pip.
Yes there is. When installing pipx with pip from python3.12, it automatically recognises it's installations from the version installed with 3.11. So when upgrading the python version, all one has to do, is reinstalling pipx.
If you want to upgrade the pipx packages to python3.12 aswell, you can use pipx reinstall-all
.