Structurer un projet Python¶
Comment bien démarrer un projet Python ?
Warning
Cette page est en cours de rédaction !
Suggestion de workflow¶
- Configurer le projet à l'aide du fichier
pyproject.toml
; - Ajouter un fichier
README.md
; - Ajouter un fichier
LICENSE
(Choose an open source license) ; - Simplifier la gestion du projet avec un fichier
Makefile
; - Gérer les dépendances avec pip-tools ;
- Mettre en place le versioning (avec Commitizen) ;
- Installer pre-commit pour uniformiser les pratiques de développement ;
- Configurer Visual Studio Code ;
- Ajouter les Outils de qualités de code ;
- Configurer les frameworks de test ;
- Mettre en place la documentation ;
- packaging and publishing ;
Exemple de structure de projet générique¶
my-project-python/
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── bin/
├── data/
├── dist/
├── docs/
├── src/
│ └── my_project/
│ ├── __init__.py
│ └── core.py
├── tests/
│ ├── integ/
│ ├── e2e/
│ └── unit/
├── stubs/
│ └── my_project/
├── templates/
├── venv/
├── .gitattributes
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
└── README.md
Application Django¶
Application FastAPI¶
Librairie (package)¶
Architecture « N-tier »¶
my-project-python/
├── src/
my_project/
│ ├── adapters/
repository.py
AbstractRepository
orm.py
│ ├── domain/
│ │ ├── errors.py
│ │ └── models/
│ ├── entry_points/
│ │ ├── api/
│ │ │ └── fastapi_app
│ │ ├── cli/
│ │ │ ├── docopt_app
│ │ │ └── typer_app
│ │ └── gui/
│ │ └── tkinter_app
│ ├── service_layer/ # define our use cases and the workflow
unit_of_work.py # provides atomic operations
AbstractUnitOfWork
handlers/
services/
sql_alchemy
SqlAlchemyRepository
SqlAlchemyUnitOfWork
csv
CsvRepository
CsvUnitOfWork
config.py
│ └── templates