Sometimes we may need a newer Python version than the one installed into our station, and the Linux distribution does not provide the last release in its repositories. We could get rid the installed Python packages and make a new installation from the source code. However, various OS applications make use of the default Python version installed, thus there is a risk of breaking some applications or services of the system in the case of overriding the Python provided by the package management system used, yum or apt, for example.
Thus, we may install Python into the local user directory, and let the default Python installation intact.
Another reason to do this is to have multiple Python environments when developing or debugging old Python scripts.
The following commands were tested into an Ubuntu 16.04 amd64 docker container.
Install prerequisites for downloading and compiling Python from source:
# apt install xz-utils wget gcc make \ libssl-dev libffi-dev zlib1g-dev
If you are running CentOS 7, install the following packages:
# yum groupinstall -y "development tools" # yum install -y \ libffi-devel \ zlib-devel \ bzip2-devel \ openssl-devel \ ncurses-devel \ sqlite-devel \ readline-devel \ tk-devel \ gdbm-devel \ db4-devel \ libpcap-devel \ xz-devel \ expat-devel
Create a folder for the new Python installation, download, and extract the source code. In this example, I used the hidden directory $HOME/.python.
mkdir $HOME/.python cd $HOME/.python wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz tar Jxvf Python-3.7.0.tar.xz cd Python-3.7.0
Compile and install Python.
./configure --prefix=$HOME/.python --enable-optimizations make make install
Next, we need to edit $HOME/.profile , and $HOME/.bashrc files to add the Python’s bin directory to $PATH.
export PATH="$HOME/.python/bin:$PATH" export PYTHONPATH="$HOME/.python"
Then we can reload the current session by doing:
Now we have multiple python installations on our system. If we type ‘python’ and press TAB twice we can see:
roger@9e65d2dd5598:~$ python python python2.7 python3-config python3.5m python3.7-config python3.7m-config python2 python3 python3.5 python3.7 python3.7m python3m
So, to run the new python REPL, we must enter:
roger@9e65d2dd5598:~$ python3.7 Python 3.7.0 (default, Sep 26 2018, 22:06:04) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Pip also is referred by its version:
roger@9e65d2dd5598:~$ pip3.7 Usage: pip3.7 <command> [options]
When developing executable python scripts for this environment, the bash shebang used must be like:
Delete the Python source code and compilation directory:
rm -fr $HOME/.python/Python-3.7.0*
This article is adapted from the solution presented in http://thelazylog.com/install-python-as-local-user-on-linux/.