4.1 Installation

Install on WSL(Ubuntu22.04)

Python is already installed on your machine (the Linux Kernel is using it) - with version 3.10.

But because Python3.11 has a major performance improvement - we want it or something later.

# Add deadsnakes(from old versions of Python) repository
# More information about deadsnakes https://github.com/deadsnakes/
sudo add-apt-repository ppa:deadsnakes/ppa

# Refresh the cache using the below command.
sudo apt update

# And install Python 3.12 using the below command.
sudo apt install python3.12 python3.12-venv -y

Virtual Environments

Important

In order not to affect the Kernel, we are using virtual environments.

Applications written in Python frequently use packages and modules that are not included in the standard library. Applications will sometimes require a particular version of a library because they may need a specific issue to be solved or they may have been created using an outdated version of the library’s interface.

Making a virtual environment — a self-contained directory tree including a Python installation for a certain version of Python and a number of additional packages—is the answer to this issue.

In Python we normally don’t use as much docker when deploying/running applications - we use Virtual Environment

More about virtual environments: https://docs.python.org/3/tutorial/venv.html

python3.12 -m venv venv
source venv/bin/activate

# Once in venv run
python3.12

# Write your hello world
print("Hello World")

# To exit
# Control+D or write exit()

# Care about the different version of Python
# If you run
python
# or
python3
# or
python3.10
# or
python3.12

# That means our shebang will be different
#!/usr/bin/env python3.12

Set Default Python Versions

Note

You can install multiple versions of Python in Linux distros, but the default can only be one version.

Warning

Make sure you know which applications depend on Python 3.10, because you can break some application

You can easily find it out using apt-cache rdepends command as below.

apt-cache rdepends python3.10

Create symbolic links for the executable and set it up as default

# Use update-alternatives to create symbolic links to python3
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 3

# And choose which one to use as Python3 via the command:
sudo update-alternatives --config python3

Manage multiple versions

How It Works

At a high level, pyenv intercepts Python commands using shim executables injected into your PATH, determines which Python version has been specified by your application, and passes your commands along to the correct Python installation.

Understanding PATH

When you run a command like python or pip, your operating system searches through a list of directories to find an executable file with that name. This list of directories lives in an environment variable called PATH, with each directory in the list separated by a colon:

/usr/local/bin:/usr/bin:/bin

Directories in PATH are searched from left to right, so a matching executable in a directory at the beginning of the list takes precedence over another one at the end. In this example, the /usr/local/bin directory will be searched first, then /usr/bin, then /bin. Understanding Shims

pyenv works by inserting a directory of shims at the front of your PATH:

$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin

Through a process called rehashing, pyenv maintains shims in that directory to match every Python command across every installed version of Python—python, pip, and so on.

Shims are lightweight executables that simply pass your command along to pyenv. So with pyenv installed, when you run, pip, your operating system will do the following:

  • Search your PATH for an executable file named pip

  • Find the pyenv shim named pip at the beginning of your PATH

  • Run the shim named pip, which in turn passes the command along to pyenv

Note

You can install multiple versions of Python in Linux distros, but the default can only be one version.

Warning

Make sure you know which applications depend on Python 3.10, because you can break some application

You can easily find it out using apt-cache rdepends command as below.

apt-cache rdepends python3.10

Install pyenv

# Install dependencies
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev

# Install pyenv
curl https://pyenv.run | bash

# Add pyenv to PATH

#WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by appending
# the following to
~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
and ~/.bashrc (for interactive shells) :

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# Restart your shell for the changes to take effect.

# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:

eval "$(pyenv virtualenv-init -)"

Where to code

1. Python’s embedded shell

Note

Why???

2. Microsoft Code

A powerful, lightweight free code editor with integrated tools to easily deploy your code to Azure. - https://code.visualstudio.com/

PRO:
  • lots of extensions

  • available Linux and Windows

  • can run code on WSL

  • support for Azure, docker and Kubernetes

CON:
  • some extensions are behind a paywall

  • you need to tune it before it’s amazing

3. Jupyter Notebook

JupyterLab is the latest web-based interactive development environment for notebooks, code, and data. Its flexible interface allows users to configure and arrange workflows in data science, scientific computing, computational journalism, and machine learning. A modular design invites extensions to expand and enrich functionality. - https://jupyter.org/

It’s Python based so you need to install it using pip

# If you have not created and activated venv
python3.12 -m venv venv
source venv/bin/activate

# Install
pip install jupyter

# Run
jupyter notebook

# Copy the link into a browser
PRO:
  • it allows you to start and play with code

  • is amazing for data science/ml or if you’re trying to visualize data

  • can be run on a server and multiple people can access it

  • is embedded into Microsoft Code

CON:
  • it’s not for OOP programming

  • hard to work if the feed will grow too much

  1. PyCharm

PyCharm is an integrated development environment (IDE) used in computer programming, specifically for the Python language. It is developed by the Czech company JetBrains. It provides code analysis, a graphical debugger, an integrated unit tester, integration with version control systems (VCSes), and supports web development with Django as well as data science with Anaconda. - https://www.jetbrains.com/pycharm/

PRO:
  • lots of extensions

  • available Linux and Windows

  • can run code on WSL

  • support for Azure, docker and Kubernetes

CON:
  • some extensions are behind a paywall

  • you need to tune it before it’s amazing

  1. vim or nano

Note

If you’re using vim or nano you’re a masochist