Back to Blog

Django Beginner Series: Setting up Python


Getting Started

Lately, I was asked about how to get started with web development and Python in general. I pointed out some books and tutorials but then thought about what could improve the probability of success over just pointing to a lot of information. And the only thing I could think of was: Implement a small project with Django step by step. Create a GitHub repository for the project. I will have a look at your progress and keep adding issues. And of course provide help when you get stuck.

If you have a better idea on how to help people get started, please tell me. I'm very interested to hear about it 🤓.

And then someone (maybe my wife) told me that writing down all those steps as a series of blogposts could be also helpful for other people. So here we are 😏. We had to choose a platform to use for this project and despite being a happy macOS by myself we agreed upon using Debian / Ubuntu for this project.

Python Setup


Installing Python

The first rule of Python is: Don't use your preinstalled system Python!

This is especially true for Debian-based distributions since they brake the Python standard library up into smaller packages, which breaks all sorts of things in weird ways. Even really basic stuff like creating a virtual environment won't work anymore.
python3 -m venv venv

The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt-get install python3-venv
And you don't want to replace your system Python with a working one, because it's used by the distribution itself for internal purposes, which probably depends on a lot of bugs they introduced, so: No easy Python installation for you!

For now, I recommend using pyenv to manage your Python installations until something better comes along. Install it by cloning the git repository like this.
git clone ~/.pyenv

And then prepare your shell for using pyenv by using the appropriate snippet for your preferred shell.

Before being able to install a real Python version using pyenv, you have to install some packages that allow you to compile Python without errors.
sudo apt install build-essential libssl-dev zlib1g-dev libgdbm-dev libnss3-dev \
  libreadline-dev libbz2-dev libsqlite3-dev libncurses5-dev libffi-dev liblzma-dev

And now the installation of Python should finally be possible.
pyenv install 3.10.6  # compils + installs Python
pyenv global 3.10.6  # instructs pyenv to use version 3.10.6 as your global Python version

Create a New Virtual Environment

Despite now having the standard libraries venv module available, I prefer using virtualenv to create virtual environments, because it's faster and automatically installs the latest versions of pip, wheel and setuptools in the virtual environments it creates, which means one line less to type.
python -m pip install virtualenv
Now just create a directory for your new project and build a new virtual environment for it.
mkdir -p ~/projects/foo
cd ~/projects/foo
python -m virtualenv --prompt . venv
The venv argument tells virtualenv which directory it should use to install the virtual environment. Using venv for that is a popular choice and IDEs like VSCode or PyCharm will automatically find and use it. The --prompt argument is used to configure what the activated virtual environment will add to your shell prompt. Using "." just uses the name of the current directory.

Now the last step is to activate your Python environment, which depends on your shell.
use venv/bin/activate for bash/zsh or venv/bin/ for the fish shell.
source venv/bin/activate
Congratulations, you have now set up Python for your new project. The next step will be to bootstrap Django 😎.