Ce guide vous explique comment automatiser la gestion de votre projet Django à l'aide d'un Makefile
. Nous allons couvrir la création du projet, la gestion des environnements virtuels, et l'exécution des tâches courantes.
Un Makefile
est un outil puissant pour automatiser les tâches de développement dans un projet Django. Il vous permet d'exécuter des commandes courantes avec une simple commande make
. Cet article explique comment configurer un Makefile
pour un projet Django et comment l'utiliser sur macOS, Linux et Windows.
Avant de commencer, assurez-vous d'avoir une structure de répertoires claire pour votre projet. Suivez ces étapes pour créer votre répertoire de projet et le Makefile
.
Ouvrez un terminal et exécutez les commandes suivantes pour créer un répertoire pour votre projet :
mkdir my_django_project
cd my_django_project
Dans le répertoire racine de votre projet Django, créez un fichier nommé Makefile
(sans extension) :
touch Makefile
Ouvrez le fichier Makefile
avec votre éditeur de texte préféré et ajoutez le contenu suivant :
# Variables
PYTHON = python3
PIP = pip3
MANAGE = $(PYTHON) manage.py
# Commandes
.PHONY: install run migrate makemigrations shell test clean help venv create_project collectstatic check lint coverage freeze startapp dbbackup dbrestore
help:
@echo "Usage:"
@echo " make [command]"
@echo ""
@echo "Commands:"
@echo " make venv - Create a virtual environment"
@echo " make install - Install dependencies"
@echo " make create_project - Create a new Django project"
@echo " make run - Run the development server"
@echo " make migrate - Apply database migrations"
@echo " make shell - Start Django shell"
@echo " make createsuperuser - Create a superuser"
@echo " make test - Run tests"
@echo " make makemigrations - Create new migrations"
@echo " make collectstatic - Collect static files"
@echo " make check - Check for any problems"
@echo " make lint - Run flake8 linter"
@echo " make coverage - Run tests with coverage"
@echo " make clean - Remove Python file artifacts"
@echo " make freeze - Generate requirements.txt from installed packages"
@echo " make startapp - Create a new Django app"
@echo " make dbbackup - Backup the database"
@echo " make dbrestore - Restore the database from a backup"
venv:
$(PYTHON) -m venv venv
. venv/bin/activate && $(PIP) install --upgrade pip
install: venv
@if [ ! -f requirements.txt ]; then \
echo "Error: requirements.txt not found."; \
exit 1; \
fi
. venv/bin/activate && $(PIP) install -r requirements.txt
create_project: venv
@read -p "Enter project name: " project_name; \
. venv/bin/activate && $(PYTHON) -m django startproject $$project_name .; \
echo "django" > requirements.txt; \
$(PIP) freeze > requirements.txt
run:
. venv/bin/activate && $(PYTHON) manage.py runserver
migrate:
. venv/bin/activate && $(PYTHON) manage.py migrate
shell:
. venv/bin/activate && $(PYTHON) manage.py shell
createsuperuser:
. venv/bin/activate && $(PYTHON) manage.py createsuperuser
test:
. venv/bin/activate && $(PYTHON) manage.py test
makemigrations:
. venv/bin/activate && $(PYTHON) manage.py makemigrations
collectstatic:
. venv/bin/activate && $(PYTHON) manage.py collectstatic --noinput
check:
. venv/bin/activate && $(PYTHON) manage.py check
lint:
. venv/bin/activate && flake8 .
coverage:
. venv/bin/activate && coverage run --source='.' manage.py test
. venv/bin/activate && coverage report
clean:
find . -type f -name "*.pyc" -delete
find . -type d -name "__pycache__" -exec rm -rf {} +
freeze:
. venv/bin/activate && $(PIP) freeze > requirements.txt
startapp:
@read -p "Enter app name: " app_name; \
. venv/bin/activate && $(PYTHON) manage.py startapp $$app_name
dbbackup:
. venv/bin/activate && $(PYTHON) manage.py dbbackup
dbrestore:
. venv/bin/activate && $(PYTHON) manage.py dbrestore --input $(file)
Utilisez les commandes suivantes pour exécuter diverses tâches avec le Makefile
:
-
Pour créer un environnement virtuel :
make venv
-
Pour installer les dépendances :
make install
-
Pour créer un nouveau projet Django :
make create_project
-
Pour lancer le serveur de développement :
make run
-
Pour appliquer les migrations :
make migrate
-
Pour ouvrir un shell Django :
make shell
-
Pour créer un superutilisateur :
make createsuperuser
-
Pour lancer les tests :
make test
-
Pour créer de nouvelles migrations :
make makemigrations
-
Pour collecter les fichiers statiques :
make collectstatic
-
Pour vérifier les problèmes :
make check
-
Pour exécuter le linter :
make lint
-
Pour exécuter les tests avec couverture :
make coverage
-
Pour nettoyer les fichiers .pyc et pycache :
make clean
-
Pour générer
requirements.txt
depuis les paquets installés :make freeze
-
Pour créer une nouvelle application Django :
make startapp
-
Pour sauvegarder la base de données :
make dbbackup
-
Pour restaurer la base de données à partir d'une sauvegarde :
make dbrestore
-
Utiliser Windows Subsystem for Linux (WSL) :
- C'est la méthode recommandée pour une compatibilité maximale.
- Installez WSL depuis le Microsoft Store ou via PowerShell.
- Installez une distribution Linux (comme Ubuntu).
- Utilisez le terminal WSL comme vous le feriez sur un système Unix.
-
Utiliser Git Bash :
- Si vous avez Git for Windows installé :
- Ouvrez Git Bash.
- Naviguez vers votre projet Django.
- Utilisez les commandes
make
normalement.
- Si vous avez Git for Windows installé :
-
Installer GNU Make pour Windows :
- Téléchargez Make pour Windows depuis GnuWin32.
- Installez-le et ajoutez-le à votre PATH.
- Utilisez
make
depuis le Command Prompt ou PowerShell.
-
Utiliser un fichier batch (.bat) à la place :
- Si vous préférez une solution 100% Windows, vous pouvez créer un fichier
make.bat
:
- Si vous préférez une solution 100% Windows, vous pouvez créer un fichier
@echo off
IF "%1"=="venv" (
python -m venv venv
venv\Scripts\activate && pip install --upgrade pip
)
IF "%1"=="install" (
IF NOT EXIST requirements.txt (
echo Error: requirements.txt not found.
exit /b 1
)
venv\Scripts\activate && pip install -r requirements.txt
)
IF "%1"=="create_project" (
set /p project_name="Enter project name: "
venv\Scripts\activate && python -m django startproject %project_name% .
echo django > requirements.txt
venv\Scripts\pip freeze > requirements.txt
)
IF "%1"=="run" (
venv\Scripts\python manage.py runserver
)
IF "%1"=="migrate" (
venv\Scripts\python manage.py migrate
)
IF "%1"=="shell" (
venv\Scripts\python manage.py shell
)
IF "%1"=="createsuperuser" (
venv\Scripts\python manage.py createsuperuser
)
IF "%1"=="test" (
venv\Scripts\python manage.py test
)
IF "%1"=="makemigrations" (
venv\Scripts\python manage.py makemigrations
)
IF "%1"=="collectstatic" (
venv\
Scripts\python manage.py collectstatic --noinput
)
IF "%1"=="check" (
venv\Scripts\python manage.py check
)
IF "%1"=="lint" (
venv\Scripts\flake8 .
)
IF "%1"=="coverage" (
venv\Scripts\coverage run --source=. manage.py test
venv\Scripts\coverage report
)
IF "%1"=="clean" (
del /Q *.pyc
rmdir /S /Q __pycache__
)
IF "%1"=="freeze" (
venv\Scripts\pip freeze > requirements.txt
)
IF "%1"=="startapp" (
set /p app_name="Enter app name: "
venv\Scripts\python manage.py startapp %app_name%
)
IF "%1"=="dbbackup" (
venv\Scripts\python manage.py dbbackup
)
IF "%1"=="dbrestore" (
venv\Scripts\python manage.py dbrestore --input %2
)
-
Pour créer un environnement virtuel :
make.bat venv
-
Pour installer les dépendances :
make.bat install
-
Pour créer un nouveau projet Django :
make.bat create_project
-
Pour lancer le serveur de développement :
make.bat run
-
Pour appliquer les migrations :
make.bat migrate
-
Pour ouvrir un shell Django :
make.bat shell
-
Pour créer un superutilisateur :
make.bat createsuperuser
-
Pour lancer les tests :
make.bat test
-
Pour créer de nouvelles migrations :
make.bat makemigrations
-
Pour collecter les fichiers statiques :
make.bat collectstatic
-
Pour vérifier les problèmes :
make.bat check
-
Pour exécuter le linter :
make.bat lint
-
Pour exécuter les tests avec couverture :
make.bat coverage
-
Pour nettoyer les fichiers .pyc et pycache :
make.bat clean
-
Pour générer
requirements.txt
depuis les paquets installés :make.bat freeze
-
Pour créer une nouvelle application Django :
make.bat startapp
-
Pour sauvegarder la base de données :
make.bat dbbackup
-
Pour restaurer la base de données à partir d'une sauvegarde :
make.bat dbrestore backup_file
Dans le répertoire my_django_project
, créez un fichier nommé Makefile
avec le contenu suivant :
# Makefile pour gérer un projet Django
.PHONY: help venv install create_project run migrate shell createsuperuser test makemigrations collectstatic check lint coverage clean freeze startapp dbbackup dbrestore
# Détection automatique de l'OS
ifeq ($(OS),Windows_NT)
PYTHON := python
VENV := venv
VENV_ACTIVATE := $(VENV)\Scripts\activate
MANAGE := $(VENV)\Scripts\python manage.py
PIP := $(VENV)\Scripts\pip
FIND := where
RM := del /Q
RMDIR := rmdir /S /Q
PIP_FREEZE := $(VENV)\Scripts\pip freeze > requirements.txt
DB_BACKUP := $(MANAGE) dbbackup
DB_RESTORE := $(MANAGE) dbrestore --input
else
PYTHON := python3
VENV := venv
VENV_ACTIVATE := . $(VENV)/bin/activate
MANAGE := $(VENV_ACTIVATE) && $(PYTHON) manage.py
PIP := $(VENV)/bin/pip
FIND := find
RM := rm -f
RMDIR := rm -rf
PIP_FREEZE := $(VENV_ACTIVATE) && pip freeze > requirements.txt
DB_BACKUP := $(MANAGE) dbbackup
DB_RESTORE := $(MANAGE) dbrestore --input
endif
help:
@echo "Usage:"
@echo " make [command]"
@echo ""
@echo "Commands:"
@echo " venv Create a virtual environment"
@echo " install Install dependencies"
@echo " create_project Create a new Django project"
@echo " run Run the development server"
@echo " migrate Apply database migrations"
@echo " shell Start Django shell"
@echo " createsuperuser Create a superuser"
@echo " test Run tests"
@echo " makemigrations Create new migrations"
@echo " collectstatic Collect static files"
@echo " check Check for any problems"
@echo " lint Run flake8 linter"
@echo " coverage Run tests with coverage"
@echo " clean Remove Python file artifacts"
@echo " freeze Generate requirements.txt from installed packages"
@echo " startapp Create a new Django app"
@echo " dbbackup Backup the database"
@echo " dbrestore Restore the database from a backup"
venv:
$(PYTHON) -m venv $(VENV)
$(VENV_ACTIVATE) && $(PIP) install --upgrade pip
install: venv
@if [ ! -f requirements.txt ]; then \
echo "Error: requirements.txt not found."; \
exit 1; \
fi
$(VENV_ACTIVATE) && $(PIP) install -r requirements.txt
create_project: venv
@read -p "Enter project name: " project_name; \
$(VENV_ACTIVATE) && $(PYTHON) -m django startproject $$project_name .; \
echo "django" > requirements.txt; \
$(PIP_FREEZE)
run:
$(MANAGE) runserver
migrate:
$(MANAGE) migrate
shell:
$(MANAGE) shell
createsuperuser:
$(MANAGE) createsuperuser
test:
$(MANAGE) test
makemigrations:
$(MANAGE) makemigrations
collectstatic:
$(MANAGE) collectstatic --noinput
check:
$(MANAGE) check
lint:
$(VENV_ACTIVATE) && flake8 .
coverage:
$(VENV_ACTIVATE) && coverage run --source='.' manage.py test
$(VENV_ACTIVATE) && coverage report
clean:
$(FIND) . -type f -name "*.pyc" -exec $(RM) {} +
$(FIND) . -type d -name "__pycache__" -exec $(RMDIR) {} +
freeze:
$(PIP_FREEZE)
startapp:
@read -p "Enter app name: " app_name; \
$(VENV_ACTIVATE) && $(MANAGE) startapp $$app_name
dbbackup:
$(DB_BACKUP)
dbrestore:
$(DB_RESTORE) $(file)
Voici comment utiliser le Makefile
pour gérer votre projet Django :
Pour créer un environnement virtuel et installer les dépendances, exécutez :
make install
Cela vérifiera si requirements.txt
existe, sinon, il affichera une erreur.
Pour créer un nouveau projet Django, utilisez :
make create_project
Le nom du projet vous sera demandé.
Pour démarrer le serveur de développement, utilisez :
make run
Voici quelques autres commandes que vous pouvez utiliser avec le Makefile
:
- Migrations :
make migrate
- Shell Django :
make shell
- Création d'App :
make startapp
- Sauvegarde de Base de Données :
make dbbackup
Ce Makefile
vous permet de gérer facilement les tâches courantes liées à votre projet Django. Il simplifie la création du projet, la gestion des dépendances, et l'exécution des tâches, tout en offrant une automatisation précieuse pour les développeurs Django.