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 user by myself we agreed upon using Debian / Ubuntu for this project.
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 https://github.com/pyenv/pyenv.git ~/.pyenv
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.11.3 # compiles + installs Python
pyenv global 3.11.3 # instructs pyenv to use version 3.11.3 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
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/activate.fish for the fish shell.
Congratulations, you have now set up Python for your new project. The next step will be to bootstrap Django 😎.