Python 3.11 has been out for a couple of months now, and I’m keen to try it out. Not only is it reportedly faster, but it also includes Tomllib which is something I want to use for life-logging scripts I’m working on for my zettelkasten.
There’s no direct way to install this via apt in Bullseye, so I’ve two options: use a virtual environment, or install from source.
I could, of course, use Conda (and have done so on my laptop), but the machine I’m going to install onto has more limited resources. I’m using a server with a single core, and mighty gigabyte of memory, and 8 GB of diskspace, so running a full-blown Conda environment is likely to be problematic. Miniconda suggests it needs 400 meg to download and install alone. Once I start creating environments, I’m likely to outgrow my vps. So I’m going to install Python 3.11 from source.
Thankfully, the Python website has all the resources I need, so the installation is a fairly straightforward case of issuing a few commands.
First, I need to install the dependencies:
sudo apt install software-properties-common wget pkg-config
Then, for the download, unpacking and installation I’ll create a temporary directory
mkdir -p ~/scratch cd ~/scratch
From there, it’s simply a case of downloading and unpacking:
## find latest version at https://www.python.org/downloads/source/ wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz tar -xf Python-3.11.0.tar.xz cd Python-3.11.0
and finally installing:
## configure and install ./configure --enable-optimizations sudo make altinstall
You can check the installation by running
which should return
alternative install means that the new version is installed as
python3.11 rather than
python3, so you can run both the original version and the new one side-by-side. this should mean that the installation doesn’t break any existing scripts. As my machine doesn’t have any python2, I decided to use
update-alternatives to make
python point to the new
sudo update-alternatives --install /usr/bin/python python3 /usr/local/bin/python3.11 1
That step’s optional, and certainly not for everyone, but it means that I can run
python3.11 by simply typing
python at the command line - perfect for my lazy fingers.