Aller au contenu

Structurer un projet Python

Comment bien démarrer un projet Python ?

Warning

Cette page est en cours de rédaction !

Suggestion de workflow

  1. Configurer le projet à l'aide du fichier pyproject.toml ;
  2. Ajouter un fichier README.md ;
  3. Ajouter un fichier LICENSE (Choose an open source license) ;
  4. Simplifier la gestion du projet avec un fichier Makefile ;
  5. Gérer les dépendances avec pip-tools ;
  6. Mettre en place le versioning (avec Commitizen) ;
  7. Installer pre-commit pour uniformiser les pratiques de développement ;
  8. Configurer Visual Studio Code ;
  9. Ajouter les Outils de qualités de code ;
  10. Configurer les frameworks de test ;
  11. Mettre en place la documentation ;
  12. 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

Références