Adding Python 3.11 to $PATH
I built Python 3.11 from source (from GitHub python/cpython branch "3.11").
Here is what I did (after downloading the repo as ZIP)
cd Downloads
7z x cpython-3.11.zip
cd cpython-3.11
chmod +x configure
./configure
make
Everything is okay, but I can run Python 3.11 only in the cpython-3.11 directory because it is not added to $PATH. And here is the problem.
What I tried :
- Rename the file
~/cpython-3.11/pythonto~/cpython-3.11/python3.11 - Open the
.bashrcfile located in/home/[username]/ - Added that line of code at the end:
(Note that my user name isexport PATH="/home/hg/cpython-3.11/python3.11:$PATHhg, cf. HGStyle).
So I restarted my terminal and it does not work. Can someone help please ?
- I tried to do the same thing on the
.profilefile but it still does not work. - I tried to remove the quote marks but it still does not work.
2 answers
There are two possible issues that I can see.
First, as already brought up in a comment thread, it appears that the export command you added in your .bashrc is missing a final ". This should cause an error message to be printed when starting a shell, making it an easy error to spot.
Second and more likely to be the problem, $PATH points to directories to search for executable files; it does not point directly at specific executable files. So if you have a python binary originally in the directory ~/cpython-3.11, then within that directory do a mv python python3.11, then want to be able to start it by giving only its name (not a full path) you will need to add the directory it is in (~/cpython-3.11) to your $PATH.
Therefore, you should probably use something like
export PATH="~/cpython-3.11:$PATH"
in your .bashrc in order to get the results you want.
Note that while changing $PATH should be sufficient to make the shell invalidate cached command paths, you may need to start a whole new bash shell for it to actually pick up on the change. You can use type -a python3.11 to get a list of all locations which your shell currently considers candidates for executing as a bare python3.11, ordered by preference.
1 comment thread
The usual way is to specify an installation location with
./configure --prefix="$HOME/python"
... and then make install after make.
If you don't specify a --prefix argument to configure, it typically defaults to /usr/local (so make install will install python as /usr/local/bin/python which should already be on your PATH, and libraries somewhere like /usr/local/lib/python/3.11).

4 comment threads