How to install Python 3.7 and Pip from Dockerfile

18,471

Python3.7 can be set as the default python using update-alternatives. After the commands to install python3.7 in the docker file, add:

# Add 3.7 to the available alternatives
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1

# Set python3.7 as the default python
RUN update-alternatives --set python /usr/bin/python3.7

If you need python3 to point at 3.7 as well, then replace /usr/bin/python and python in the above calls with /usr/bin/python3 and python3.

Share:
18,471
j_dev
Author by

j_dev

Updated on June 21, 2022

Comments

  • j_dev
    j_dev almost 2 years

    I am trying to build a custom Docker image based on Ubuntu 18.04. Ubuntu comes loaded with Python 3.6 but I want to 1.) install Python 3.7, 2.) make it the default Python version (so it can be called with python instead of python3.7, and 3.) install pip. When I run docker build, it fails to reload ~/.bashrc, and thus python is not an alias for python3.7. How can I resolve this issue?

    FROM ubuntu:18.04
    
    # Set temp work directory
    # for package configuration
    WORKDIR /usr/src/cache
    
    # Update apt packages
    RUN apt update
    RUN apt upgrade -y
    
    # Install vim
    RUN apt install vim -y
    
    # Install python 3.7
    RUN apt install software-properties-common -y
    RUN add-apt-repository ppa:deadsnakes/ppa
    RUN apt install python3.7 -y
    
    # Make python 3.7 the default
    RUN echo "alias python=python3.7" >> ~/.bashrc
    RUN export PATH=${PATH}:/usr/bin/python3.7
    RUN /bin/bash -c "source ~/.bashrc"
    
    # Install pip
    RUN apt install python3-pip -y
    RUN python -m pip install --upgrade pip
    
    # Install lsof
    RUN apt install lsof
    
    # Install ta-lib
    # Source: https://medium.com/@artiya4u/installing-ta-lib-on-ubuntu-944d8ca24eae
    RUN apt install build-essential wget -y
    RUN wget https://artiya4u.keybase.pub/TA-lib/ta-lib-0.4.0-src.tar.gz
    RUN tar -xvf ta-lib-0.4.0-src.tar.gz
    RUN /bin/bash -c "cd ta-lib/; ./configure --prefix=/usr; make; make install"
    
    # Install pip packages
    COPY requirements.txt ./
    RUN pip install -r requirements.txt
    
    # Set working directory for code
    WORKDIR /usr/src/app
    
    

    Output when running docker build:

    Step 1/20 : FROM ubuntu:18.04
     ---> c3c304cb4f22
    Step 2/20 : WORKDIR /usr/src/cache
     ---> Using cache
     ---> 6bab8662b50a
    Step 3/20 : RUN apt update
     ---> Using cache
     ---> 4d3bc75e5b24
    Step 4/20 : RUN apt upgrade -y
     ---> Using cache
     ---> 24a93e9b2518
    Step 5/20 : RUN apt install software-properties-common -y
     ---> Using cache
     ---> 077ead1bcb54
    Step 6/20 : RUN add-apt-repository ppa:deadsnakes/ppa
     ---> Using cache
     ---> 7771a6ac7068
    Step 7/20 : RUN apt install python3.7 -y
     ---> Using cache
     ---> 5f57462b0444
    Step 8/20 : RUN echo "alias python=python3.7" >> ~/.bashrc
     ---> Running in c31352b84ecd
    Removing intermediate container c31352b84ecd
     ---> c1060eaa66b8
    Step 9/20 : RUN export PATH=${PATH}:/usr/bin/python3.7
     ---> Running in 5de52797c355
    Removing intermediate container 5de52797c355
     ---> 2a9eb6215da8
    Step 10/20 : RUN /bin/bash -c "source ~/.bashrc"
     ---> Running in cde1dd943e21
    Removing intermediate container cde1dd943e21
     ---> 99eae1743824
    Step 11/20 : RUN apt install python3-pip -y
     ---> Running in 2dece67c9c40
    
    WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    
    Reading package lists...
    Building dependency tree...
    Reading state information...
    ........[OMITTING SOME OUTPUT].......
    Setting up build-essential (12.4ubuntu1) ...
    Processing triggers for libc-bin (2.27-3ubuntu1) ...
    Removing intermediate container 2dece67c9c40
     ---> 34c1ecded3f2
    Step 12/20 : RUN python -m pip install --upgrade pip
     ---> Running in 32ffece96844
    /bin/sh: 1: python: not found
    The command '/bin/sh -c python -m pip install --upgrade pip' returned a non-zero code: 127