Chiffrer un projet d'énergie avec quatre dépôts GitHub gratuits
Quatre bibliothèques libres, installées sur ton poste en vingt minutes, pour remplacer les hypothèses de coin de table par des séries calculées.
RepèreCe que tu vas savoir faire
Sortir un profil de production solaire ou éolien à l'heure, faire tourner un réseau simplifié et voir ce qu'il coûte à l'heure la plus tendue. Chaque outil a sa commande d'installation, son code à copier-coller et ses réglages. Et si tu ne codes pas, le prompt Claude Code fait le travail.
La fiche
| Dépôt | Ce qu'il calcule | Étoiles | La doc |
|---|---|---|---|
| PyPSA | Réseau, dispatch, investissement | 2 148 | docs.pypsa.org |
| pvlib | Production solaire, heure par heure | 1 667 | pvlib docs |
| atlite | Météo transformée en gisement | 401 | atlite docs |
| windpowerlib | Une éolienne ou un parc | 396 | windpowerlib docs |
Nombre d'étoiles relevé sur GitHub le 16 septembre 2026.
PrérequisÀ faire une seule fois
- Python 3.11 ou plus récent (python.org)
- Un environnement isolé :
python3 -m venv .venv && source .venv/bin/activate - Pour PyPSA, un solveur gratuit :
pip install highspy - Pour atlite, un compte gratuit au Climate Data Store de Copernicus (météo ERA5)
- Pas envie de coder ? Va directement au prompt Claude Code, en bas de page : il installe tout.
1PyPSA, le système entier
À quoi ça sert. Poser un réseau (nœuds, lignes, moyens de production, charges) et demander à un solveur ce qui tourne, à quel coût, heure par heure. C'est l'outil qui répond à « et si on ajoutait 40 MW de solaire ici ? ».
1Installe
pip install pypsa highspy
2Colle ce code
import pypsa
n = pypsa.Network()
n.add("Bus", "poste")
n.add("Load", "site", bus="poste", p_set=100) # 100 MW appelés
n.add("Generator", "reseau", bus="poste",
p_nom=100, marginal_cost=20) # 20 €/MWh
n.optimize()
print(n.objective) # le coût du dispatch
3Règle-le
marginal_costle coût variable de chaque moyen (€/MWh), qui décide de l'ordre d'appelp_nom_extendable=Truele solveur dimensionne au lieu d'imposer la puissancesnapshotsles pas de temps (une année à l'heure, c'est 8 760)"StorageUnit"tester une batterie sans refaire le modèle
AstuceCommence petit
Une semaine de pointe d'abord, pas une année. Le modèle tourne en deux secondes, tu vois tout de suite si tes hypothèses tiennent, et tu passes à l'année quand la structure est bonne :
import pandas as pd
n.set_snapshots(pd.date_range("2026-01-12", periods=168, freq="h"))
2pvlib, le solaire heure par heure
À quoi ça sert. Calculer ce qu'une installation photovoltaïque produit réellement sur un site : position du soleil, inclinaison, température des modules, pertes. La bibliothèque de référence, née chez Sandia.
1Installe
pip install pvlib pandas
2Colle ce code
import pandas as pd
from pvlib.location import Location
site = Location(43.30, 5.37, tz="Europe/Paris", altitude=10) # Marseille
heures = pd.date_range("2026-06-21", periods=24, freq="h", tz="Europe/Paris")
ciel_clair = site.get_clearsky(heures)
print(ciel_clair.head()) # ghi, dni, dhi
3Règle-le
surface_tilt,surface_azimuthinclinaison et orientation des modulesModelChainla chaîne complète, du rayonnement à la sortie d'onduleurtemperature_model_parametersles pertes thermiques, souvent sous-estiméespvlib.iotoolslit PVGIS et les fichiers météo réels
AttentionLe ciel clair n'est pas la production
Il donne le plafond théorique. Passe à PVGIS dès que tu chiffres pour de vrai :
from pvlib.iotools import get_pvgis_hourly
donnees, meta = get_pvgis_hourly(43.30, 5.37, start=2020, end=2020)
3atlite, la météo devient un gisement
À quoi ça sert. Transformer des champs météo (vent, rayonnement, température) en séries de production sur une zone entière. Répond à « combien produirait un parc n'importe où dans cette région ? ».
1Installe
pip install atlite
2Colle ce code
import atlite
zone = atlite.Cutout(path="sud-2023.nc", module="era5",
x=slice(3, 7), y=slice(42.5, 45), # la fenêtre géographique
time="2023-06")
zone.prepare() # télécharge la météo
facteur = zone.wind(turbine="Vestas_V112_3MW", capacity_factor=True)
3Règle-le
modulela source météo ("era5"couvre le monde, maille de 30 km)x,yla fenêtre : plus elle est large, plus le téléchargement est longturbinele modèle de machine, pris dans le catalogue fournicapacity_factor=Truele facteur de charge plutôt que les mégawatts
AstuceGagne une heure
Le premier prepare() peut prendre une heure et plusieurs gigaoctets. Lance-le sur un mois avant l'année, et garde le fichier : il se relit sans retélécharger.
4windpowerlib, une machine, un parc
À quoi ça sert. Descendre au niveau de la machine : courbe de puissance, hauteur de moyeu, extrapolation du vent, effet de sillage. Quand atlite donne l'ordre de grandeur régional, windpowerlib donne le chiffre d'un projet précis.
1Installe
pip install windpowerlib
2Colle ce code
from windpowerlib import WindTurbine
machine = WindTurbine(turbine_type="E-126/4200", hub_height=135)
print(machine.power_curve.head()) # la courbe de puissance du catalogue
3Va plus loin
Passe du vent mesuré à la puissance produite avec la chaîne complète :
from windpowerlib import ModelChain
# meteo : ton tableau vent / température
production = ModelChain(machine).run_model(meteo).power_output
Pour un parc, WindFarm agrège plusieurs machines avec leurs pertes. Et règle hub_height au mètre près : dix mètres changent le résultat de plusieurs pour cent.
5Tu ne codes pas ? Le prompt Claude Code
Colle ce texte dans Claude Code (ou Cursor), dans un dossier vide, et remplace ce qui est entre [crochets] :
Installe pvlib et pypsa dans un environnement virtuel.
Calcule la production horaire d'une centrale solaire de [12 MWc] à [ta ville], sur une année, avec les données PVGIS.
Puis construis un réseau PyPSA à un nœud : cette centrale, une charge industrielle de [8 MW] constante, et le réseau public à [95 €/MWh].
Dis-moi combien d'heures par an la centrale couvre la charge, et ce que ça change sur la facture. Donne-moi le code, les hypothèses, les sources des données, et trace un graphique.
AstucePars d'un exemple officiel
Ouvre d'abord la doc (dernière colonne de la fiche), repère l'exemple le plus proche de ton cas, copie son lien et colle-le dans le prompt. Claude part de l'exemple au lieu d'inventer.
6Avant de mettre ça dans un livrable
- Les API bougent. Ces exemples suivent la doc du jour : vérifie la version que tu installes.
- Un modèle n'est pas une mesure. Écris tes hypothèses à côté du résultat, toujours.
- ERA5, c'est 30 km de maille. Un ordre de grandeur régional, pas une campagne de mesure sur site.
7Questions fréquentes
Faut-il un gros ordinateur ? Non pour pvlib et windpowerlib. atlite demande quelques gigaoctets de disque. PyPSA dépend de la taille du réseau : un nœud est instantané, un pays entier demande de la mémoire.
C'est gratuit ? Oui, les quatre sont open source (MIT ou BSD-3), usage commercial compris, à condition de garder la mention de copyright.
Par lequel commencer ? pvlib si tu as un site précis à chiffrer. PyPSA si ta question porte sur l'équilibre et le coût du système.