pypsa-earth

PyPSA-Earth: A flexible Python-based open optimisation model to study energy system futures around the world.

https://github.com/pypsa-meets-earth/pypsa-earth

Science Score: 77.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 6 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
    11 of 74 committers (14.9%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.0%) to scientific vocabulary

Keywords

energy-system-model energy-system-planning investment-optimization operational-optimization power-system-model power-system-planning pypsa-africa pypsa-earth python scenario-analysis

Keywords from Contributors

energy-system energy-transition heat-pump power-systems solar demand-flexibility energy-model great-britain pypsa sector-coupling
Last synced: 6 months ago · JSON representation ·

Repository

PyPSA-Earth: A flexible Python-based open optimisation model to study energy system futures around the world.

Basic Info
Statistics
  • Stars: 285
  • Watchers: 11
  • Forks: 252
  • Open Issues: 244
  • Releases: 13
Topics
energy-system-model energy-system-planning investment-optimization operational-optimization power-system-model power-system-planning pypsa-africa pypsa-earth python scenario-analysis
Created almost 5 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

PyPSA-Earth. A Flexible Python-based Open Optimisation Model to Study Energy System Futures around the World.

by

Development Status: Stable and Active

Test workflows Documentation Status Size License: AGPL v3 REUSE status Code style: black pre-commit.ci status Discord Google Drive DOI

PyPSA-Earth: A Global Sector-Coupled Open-Source Multi-Energy System Model

PyPSA-Earth is the first open-source global cross-sectoral energy system model with high spatial and temporal resolution. The workflow provide capabilities for modelling the energy systems of any country in the world, enabling large-scale collaboration and transparent analysis for an inclusive and sustainable energy future. PyPSA-Earth is suitable for both operational studies and capacity expansion studies. Its sector-coupled modeling capabilities enable features for the detailed optimization of multi-energy systems, covering electricity, heating, transport, industry, hydrogen and more.

All the data needed for a simulation are automatically and flexibly retrieved from open sources. This includes, in particular, energy demand across sectors, generation capacities, medium- to high-voltage networks, and renewable energy potentials. Custom datasets can also be integrated as needed, and kept private if required. At the same time, PyPSA-Earth-Status provides functionality to share regional insights. If you are willing to contribute your regional expertise, feel free to open an issue there.

PyPSA-Earth is capable of providing the modelling evidence needed to translate the implications of energy scenarios into actionable regional strategies. By making this tool openly available, we aim to foster collaboration, innovation, and informed decision-making to support sustainable and efficient energy solutions worldwide.

Details on the model are available in the following academic publications:

  • power model M. Parzen et all. "PyPSA-Earth: A new global open energy system optimization model demonstrated in Africa", Applied Energy, 341, 2023. https://doi.org/10.1016/j.apenergy.2023.121096
  • sector-coupled model H. Abdel-Khalek et al. "PyPSA-Earth sector-coupled: A global open-source multi-energy system model showcased for hydrogen applications in countries of the Global South", Applied Energy, 383, 2025. https://doi.org/10.1016/j.apenergy.2025.125316

PyPSA meets Earth is an independent research initiative developing a powerful energy system model for Earth. We work on open data, open source modelling, open source solver support and open communities. Stay tuned and join our mission - We look for users, co-developers and leaders!

Figure: Example power systems build with PyPSA-Earth.
See images of ~193 more countries at Zenodo

The diagram below depicts one representative clustered node for the sector-coupled model with its generation, storage and conversion technologies.

Livetracker. Most popular global models:

How to get involved

There are multiple ways to get involved and learn more about our work: 1. Join our Discord Server to connect in discussion channels, get help in the support forum, and join our meetings 2. Chat on Discord with us in the following open meetings: - General initiative meeting for project news and high-level code updates. Held every fourth Thursday 16-17:00 (UK time) and is a perfect place to meet the community and get a high-level update on PyPSA ecosystem relevant for PyPSA-Earth developments. - Weekly developers meetings - Eastern-Hemisphere friendly Morning meeting every Thursday at 09:00 (UK time). - Western-Hemisphere friendly Evening meeting every Thursday 16:00 (UK time). Every forth Thursday is replaced by the General initiative meeting which has a more high-level perspective, but you can also join to discuss more particular questions. 3. Look at public materials at google Drive to share to minutes, presentations, lists and documents. Feel gree to get a look! 4. Notify your interest to on-demand meetings: - On-demand meetings - Demand creation and prediction meeting - AI asset detection meeting - Outreach meeting for planning, discussing events, workshops, communication, community activities 5. Join us and propose your stream.

Installation

  1. Open your terminal at a location where you want to install pypsa-earth. Type the following in your terminal to download the package from GitHub:

bash .../some/path/without/spaces % git clone https://github.com/pypsa-meets-earth/pypsa-earth.git 2. The python package requirements are curated in the envs/environment.yaml file. The environment can be installed using:

bash .../pypsa-earth % conda env create -f envs/environment.yaml

If the above takes longer than 30min, you might want to try mamba for faster installation:

```bash (base) conda install -c conda-forge mamba

.../pypsa-earth % mamba env create -f envs/environment.yaml

```

  1. For running the optimization one has to install the solver. We can recommend the open source HiGHs solver which installation manual is given here.
  2. To use jupyter lab (new jupyter notebooks) continue with the ipython kernel installation and test if your jupyter lab works:

bash .../pypsa-earth % ipython kernel install --user --name=pypsa-earth .../pypsa-earth % jupyter lab 5. Verify or install a java redistribution from the official website or equivalent. To verify the successful installation the following code can be tested from bash:

bash .../pypsa-earth % java -version

The expected output should resemble the following:

bash java version "1.8.0_341" Java(TM) SE Runtime Environment (build 1.8.0_341-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)

Running the model in previous versions

The model can be run in previous versions by checking out the respective tag. For instance, to run the model in version 0.6.0, which is the last version before the recent PyPSA update, the following command can be used:

bash git checkout v0.6.0 After checking out the tag, the model can be run as usual. Please make sure to use the environment built for the respective version.

Test run on tutorial

  • In the folder open a terminal/command window to be located at this path ~/pypsa-earth/
  • Activate the environment conda activate pypsa-earth
  • Rename config.tutorial.yaml to config.yaml. For instance in Linux: bash mv config.tutorial.yaml config.yaml
  • Run a dryrun of the Snakemake workflow by typing simply in the terminal: bash snakemake -j 1 solve_all_networks -n

Remove the -n to do a real run. Follow the tutorial of PyPSA-Eur 1 and 2 on YouTube to continue with an analysis.

Training

  • We recently updated some hackathon material for PyPSA-Earth. The hackathon contains jupyter notebooks with exercises. After going through the 1 day theoretical and practical material you should have a suitable coding setup and feel confident about contributing.
  • The get a general feeling about the PyPSA functionality, we further recommend going through the PyPSA and Atlite examples.

Questions and Issues

  • We are happy to answer questions and help with issues if they are public. Through being public the wider community can benefit from the raised points. Some tips. Bugs and feature requests should be raised in the GitHub Issues. General workflow or user questions as well as discussion points should be posted at the GitHub Discussions tab. Happy coding.

Documentation

The documentation is available here: documentation.

Collaborators

FabianHofmann
FabianHofmann
fneum
fneum
ekatef
ekatef
euronion
euronion
Justus-coded
Justus-coded
mnm-matin
mnm-matin
GbotemiB
GbotemiB
martacki
martacki
LukasFrankenQ
LukasFrankenQ
pz-max
pz-max
davide-f
davide-f
koen-vg
koen-vg
Eddy-JV
Eddy-JV
hazemakhalek
hazemakhalek
energyLS
energyLS
AnasAlgarei
AnasAlgarei
yerbol-akhmetov
yerbol-akhmetov
doneachh
doneachh
danielelerede-oet
danielelerede-oet
DeniseGiub
DeniseGiub
finozzifa
finozzifa
virio-andreyana
virio-andreyana
Tomkourou
Tomkourou
GridGrapher
GridGrapher
drifter089
drifter089
Eric-Nitschke
Eric-Nitschke
glenkiely-ieg
glenkiely-ieg
Emre-Yorat89
Emre-Yorat89
ljansen-iee
ljansen-iee
giacfalk
giacfalk
Ekaterina-Vo
Ekaterina-Vo
lkstrp
lkstrp
TosinGeorge
TosinGeorge
Ly0n
Ly0n
Tooblippe
Tooblippe
arizeosalac
arizeosalac
SermishaNarayana
SermishaNarayana
cpschau
cpschau
gianvicolux
gianvicolux
choiHenry
choiHenry
LucieRC
LucieRC
carlosfv92
carlosfv92
rajesh-ieg
rajesh-ieg
asolavi
asolavi
rsparks3
rsparks3
ollie-bell
ollie-bell
juli-a-ko
juli-a-ko
squoilin
squoilin
siddharth-krishna
siddharth-krishna
pitmonticone
pitmonticone
PierreKara1
PierreKara1
Netotse
Netotse
milyas009
milyas009
kma33
kma33
jessLryan
jessLryan
jarry7
jarry7
HanaElattar
HanaElattar
EmreYorat
EmreYorat
AndreCNF
AndreCNF
AlexanderMeisinger
AlexanderMeisinger

Owner

  • Name: PyPSA meets Earth
  • Login: pypsa-meets-earth
  • Kind: organization

An open source energy system model initiative for our Earth

Citation (CITATION.cff)

# SPDX-FileCopyrightText:  PyPSA-Earth and PyPSA-Eur Authors
# SPDX-License-Identifier: AGPL-3.0-or-later

title: PyPSA-Earth. A new global open energy system optimization model demonstrated in Africa
abstract: This repository contains the source code of the paper PyPSA-Earth. A new global open energy system optimization model demonstrated in Africa by Maximilian Parzen, Hazem Abdel-Khalek, Ekaterina Fedotova, Matin Mahmood, Martha Maria Frysztacki, Johannes Hampp, Lukas Franken, Leon Schumm, Fabian Neumann, Davide Poli, Aristides Kiprakis and Davide Fioriti, from Applied Energy
doi: 10.1016/j.apenergy.2023.121096
repository-code: https://github.com/pypsa-meets-earth/pypsa-earth
version: 1.0.0
date-released: 2023-04-18
message: If you use this software in your work, please cite it using the following metadata.
authors:
  - given-names: Maximilian
    family-names: Parzen
    orcid: https://orcid.org/0000-0002-4390-0063
  - given-names: Hazem
    family-names: Abdel-Khalek
  - given-names: Ekaterina
    family-names: Fedotova
    orcid: https://orcid.org/0000-0002-5590-9591
  - given-names: Matin
    family-names: Mahmood
  - given-names: Martha Maria
    family-names: Frysztacki
    orcid: https://orcid.org/0000-0002-0788-1328
  - given-names: Johannes
    family-names: Hampp
    orcid: https://orcid.org/0000-0002-1776-116X
  - given-names: Lukas
    family-names: Franken
  - given-names: Leon
    family-names: Schumm
  - given-names: Fabian
    family-names: Neumann
    orcid: https://orcid.org/0000-0002-6604-5450
  - given-names: Davide
    family-names: Poli
    orcid: https://orcid.org/0000-0002-5045-9034
  - given-names: Aristides
    family-names: Kiprakis
  - given-names: Davide
    family-names: Fioriti
    orcid: https://orcid.org/0000-0001-5491-7912
cff-version: 1.2.0

GitHub Events

Total
  • Create event: 49
  • Release event: 3
  • Issues event: 181
  • Watch event: 40
  • Delete event: 44
  • Member event: 3
  • Issue comment event: 788
  • Push event: 330
  • Pull request review event: 572
  • Pull request review comment event: 450
  • Pull request event: 414
  • Fork event: 69
Last Year
  • Create event: 49
  • Release event: 3
  • Issues event: 181
  • Watch event: 40
  • Delete event: 44
  • Member event: 3
  • Issue comment event: 788
  • Push event: 330
  • Pull request review event: 572
  • Pull request review comment event: 450
  • Pull request event: 414
  • Fork event: 69

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 5,033
  • Total Committers: 74
  • Avg Commits per committer: 68.014
  • Development Distribution Score (DDS): 0.797
Past Year
  • Commits: 716
  • Committers: 31
  • Avg Commits per committer: 23.097
  • Development Distribution Score (DDS): 0.873
Top Committers
Name Email Commits
davide-f f****s@g****m 1,021
ekatef e****a@g****m 738
Max Parzen m****n@e****k 525
pre-commit-ci[bot] 6****] 520
Hazem-IEG h****k@i****e 412
energyls l****m@o****e 297
Restyled.io c****s@r****o 288
yerbol-akhmetov y****3@g****m 140
Emmanuel Bolarinwa g****a@g****m 137
Daniele Lerede d****e@o****g 91
github-actions[bot] 4****] 85
Fabian f****f@g****e 70
mnm-matin m****9@g****m 67
DeniseGiub d****o@s****t 63
contrib-readme-bot c****n@n****m 62
Eddy-JV e****t@g****m 54
Thomas Kouroughli t****u@i****m 42
Anton Achhammer a****r@o****e 41
Fabrizio Finozzi f****s@g****m 37
Hazem 8****G 31
virio-andreyana a****o@g****m 30
drifter089 a****7@g****m 27
GridGrapher 1****r 25
Eric Nitschke e****e@t****e 17
glenkiely-ieg 9****g 17
cpschau c****s@i****e 15
giacfalk g****a@g****m 12
carlosfv c****2@h****m 11
martha.mf m****i@k****u 11
ljansen l****n@i****e 11
and 44 more...

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 538
  • Total pull requests: 1,205
  • Average time to close issues: 4 months
  • Average time to close pull requests: 14 days
  • Total issue authors: 60
  • Total pull request authors: 75
  • Average comments per issue: 2.5
  • Average comments per pull request: 2.31
  • Merged pull requests: 817
  • Bot issues: 3
  • Bot pull requests: 343
Past Year
  • Issues: 142
  • Pull requests: 517
  • Average time to close issues: 20 days
  • Average time to close pull requests: 8 days
  • Issue authors: 30
  • Pull request authors: 37
  • Average comments per issue: 0.94
  • Average comments per pull request: 1.75
  • Merged pull requests: 314
  • Bot issues: 3
  • Bot pull requests: 129
Top Authors
Issue Authors
  • davide-f (164)
  • pz-max (132)
  • ekatef (56)
  • GbotemiB (26)
  • energyLS (15)
  • hazemakhalek (14)
  • yerbol-akhmetov (14)
  • mnm-matin (9)
  • Tomkourou (9)
  • danielelerede-oet (7)
  • doneachh (7)
  • Eric-Nitschke (7)
  • euronion (6)
  • ljansen-iee (4)
  • carlosfv92 (4)
Pull Request Authors
  • davide-f (201)
  • github-actions[bot] (164)
  • ekatef (145)
  • pz-max (97)
  • restyled-io[bot] (90)
  • pre-commit-ci[bot] (83)
  • yerbol-akhmetov (70)
  • GbotemiB (46)
  • danielelerede-oet (27)
  • finozzifa (25)
  • virio-andreyana (22)
  • energyLS (17)
  • doneachh (17)
  • Eric-Nitschke (13)
  • Tomkourou (12)
Top Labels
Issue Labels
bug (197) good first issue (72) improvement (61) help wanted (37) feature request (26) documentation (21) reimplementation (4) alternative_clustering (4) high priority (3) question (2) dependencies (1) github_actions (1)
Pull Request Labels
dependencies (6) improvement (3) github_actions (2) bug (1) feature request (1) wontfix (1)

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 13
proxy.golang.org: github.com/pypsa-meets-earth/pypsa-earth
  • Versions: 13
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.4%
Average: 5.6%
Dependent repos count: 5.8%
Last synced: 6 months ago

Dependencies

doc/requirements.txt pypi
  • atlite >=0.2.2
  • dask <=2021.3.1
  • descartes *
  • esy-osm-pbf *
  • esy-osmfilter *
  • memory_profiler *
  • powerplantmatching >=0.4.8
  • pycountry *
  • pypsa *
  • pyyaml *
  • rioxarray *
  • scikit-learn *
  • seaborn *
  • setuptools <58.3.0
  • setuptools *
  • sphinx *
  • sphinx_rtd_theme *
  • tables *
  • vresutils >=0.3.1
.github/workflows/ci-linux.yaml actions
  • actions/cache v2 composite
  • actions/checkout v2 composite
  • conda-incubator/setup-miniconda v2 composite
.github/workflows/ci-mac.yaml actions
  • actions/cache v2 composite
  • actions/checkout v2 composite
  • conda-incubator/setup-miniconda v2 composite
.github/workflows/ci-windows.yaml actions
  • actions/cache v2 composite
  • actions/checkout v2 composite
  • conda-incubator/setup-miniconda v2 composite
.github/workflows/main.yml actions
  • akhilmhdh/contributors-readme-action v2.3.6 composite
envs/environment.yaml conda
  • atlite
  • cartopy
  • contextily
  • country_converter
  • dask
  • descartes
  • earth-osm >=0.1.0
  • fiona !=1.8.22
  • geopandas >=0.11.0
  • geopy
  • geoviews
  • glpk
  • graphviz
  • gurobi
  • hvplot
  • ipopt <3.13.3
  • ipykernel
  • ipython
  • jupyterlab
  • lxml
  • mamba
  • matplotlib <=3.5.2
  • memory_profiler
  • netcdf4
  • networkx
  • numpy
  • openpyxl
  • pandas
  • pip
  • powerplantmatching >=0.5.7
  • pre-commit
  • py7zr
  • pydoe2
  • pyomo
  • pypsa >=0.24,<0.25
  • pytables
  • python >=3.8
  • pytz
  • rasterio !=1.2.10
  • reverse-geocode
  • rioxarray
  • ruamel.yaml <=0.17.26
  • scipy
  • seaborn
  • shapely >=2
  • snakemake-minimal
  • tqdm
  • xarray
  • xlrd