Python Install

Python Install Guide

Optional LXC Container launch to hold the python installation

lxc launch local:ubuntu-16.04 python-dev-ub-16-04
apt install -y curl ca-certificates && update-ca-certificates
apt upgrade -y

Required packages to build and install python

apt install -y \
 wget \
 build-essential \
 libssl-dev \
 zlib1g-dev \
 libbz2-dev \
 libreadline-dev \
 libsqlite3-dev \
 libncurses5-dev \
 libncursesw5-dev \
 xz-utils \
 tk-dev

Build and Install

cd /usr/src
wget http://python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
tar xf Python-3.6.4.tar.xz
cd Python-3.6.4
./configure --enable-optimizations
make altinstall
exit

Note: make altinstall causes it to not replace the built in python executable.

Ensure that secure_path in /etc/sudoers file includes /usr/local/bin. The line should look something like this:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

Upgrade pip

sudo pip3.6 install --upgrade pip

Optional add User to sudoers group and allow passwordless priviledge escalation

Add ubuntu to sudoers group

usermod -aG sudo ubuntu
su - ubuntu

sudo -S true # To get rid of:: sudo: no tty present and no askpass program specifie
             # Under root: To address same error as above

Add ubuntu user to sudoers

su
touch /etc/sudoers.d/ubuntu
echo 'ubuntu  ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/ubuntu
chmod 0440 /etc/sudoers.d/ubuntu

Create and add ~/bin to $PATH

su - ubuntu
mkdir ~/bin
export PATH=$HOME/bin:$PATH

Test Script running from ~/bin

cat << EOM >> ~/bin/helloworld.py
#!/usr/bin/env python3.6
print("Hello, World")
EOM

chmod u+x helloworld.py