Skip to content

Structure du projet

Vue d'ensemble

Chaque projet généré par PyFoundry suit cette structure standardisée :

mon-projet-data-science/
├── .devcontainer/          # Configuration environnement VS Code
│   └── devcontainer.json
├── src/                    # Code source principal
├── data/                   # Données du projet
│   ├── raw/               # Données brutes (lecture seule)
│   └── processed/         # Données transformées
├── notebooks/             # Notebooks Jupyter d'analyse
├── pyproject.toml         # Configuration et dépendances
├── README.md              # Documentation du projet
└── .gitignore             # Fichiers ignorés par Git

Détail des dossiers

.devcontainer/

Configuration pour VS Code Dev Containers. Garantit un environnement de développement reproductible avec : - devcontainer.json : Configuration principale du container - postCreateCommand.sh : Script de configuration automatique - Python {{ cookiecutter.python_version }} - Installation conditionnelle d'outils selon vos choix : - uv (gestion des dépendances moderne) - Node.js/npm (pour outils web)
- Configuration Git de base - Extensions VS Code pré-installées - Port 8888 exposé pour Jupyter

.venv/ (généré)

Environnement virtuel Python créé automatiquement par le devcontainer : - Contient toutes les dépendances du projet - Isolé des autres projets - Activé automatiquement dans VS Code et les terminaux - Ignoré par Git

src/

Code source principal du projet. Structure recommandée :

src/
├── __init__.py
├── data/                  # Scripts de collecte/nettoyage
│   ├── __init__.py
│   ├── download.py
│   └── preprocess.py
├── features/              # Feature engineering
│   ├── __init__.py
│   └── build_features.py
├── models/                # Modèles et prédictions
│   ├── __init__.py
│   ├── train.py
│   └── predict.py
└── utils/                 # Utilitaires communs
    ├── __init__.py
    └── helpers.py

data/

Stockage des données avec séparation claire :

  • raw/ : Données d'origine, ne jamais modifier
  • Versionnées avec Git LFS si nécessaire
  • Formats : CSV, JSON, Parquet, etc.

  • processed/ : Données transformées et nettoyées

  • Générées par vos scripts de traitement
  • Ignorées par Git (sauf si petites et importantes)

Données sensibles

Ne commitez jamais de données personnelles ou sensibles. Utilisez .gitignore et des fichiers de configuration pour les chemins externes.

notebooks/

Notebooks Jupyter pour l'exploration et l'analyse :

notebooks/
├── 01-exploration-donnees.ipynb
├── 02-nettoyage-donnees.ipynb
├── 03-feature-engineering.ipynb
├── 04-modelisation.ipynb
└── 05-evaluation-resultats.ipynb

Convention de nommage : ##-description-courte.ipynb

Fichiers de configuration

pyproject.toml

Configuration centralisée pour : - Métadonnées du projet (nom, version, description) - Dépendances Python (runtime et développement) - Configuration des outils (ruff, pytest, etc.)

README.md

Documentation générée dynamiquement avec : - Description du projet - Instructions d'installation - Structure du projet - Guide de contribution

.gitignore

Ignore automatiquement : - Fichiers Python temporaires (__pycache__/, *.pyc) - Environnements virtuels - Notebooks checkpoints - Données dans data/raw/ et data/processed/ - Modèles ML volumineux - Fichiers système

Dépendances incluses

Runtime

  • ipykernel : Support Jupyter dans VS Code
  • ipywidgets : Widgets interactifs pour notebooks
  • python-dotenv : Gestion des variables d'environnement
  • gitpython : Intégration Git programmatique

Développement

  • pre-commit : Hooks de qualité de code (v0.3)

Personnalisation

Ajouter des dépendances

# Dépendances runtime
uv add pandas numpy scikit-learn matplotlib seaborn

# Dépendances développement
uv add --dev pytest black isort mypy

Modifier la structure

La structure est flexible. Vous pouvez : - Ajouter des dossiers dans src/ - Créer des sous-modules spécialisés - Adapter selon votre domaine (NLP, CV, etc.)

Configuration personnalisée

Modifiez pyproject.toml pour : - Ajuster les versions Python supportées - Configurer les outils de développement - Définir des scripts personnalisés