Python interface for controlling OpenDSS Powered by EPRI.
Project description
๐ py-dss-interface: Python Control for OpenDSS Powered by EPRI
py-dss-interface is a Python package to control OpenDSS Powered by EPRI โ the official EPRI-maintained distribution of OpenDSS โ using the Python programming language. It is designed to work with OpenDSS Powered by EPRI only. This tool is actively used across multiple EPRI research projects and by utilities and consultants, and it also serves as a foundation for automated testing workflows for OpenDSS.
๐ What Can You Do With py-dss-interface?
Use the full power of Python to control and automate your OpenDSS workflows:
- โ๏ธ Automate repetitive OpenDSS tasks.
- ๐ง Manipulate circuit, element, and bus properties with Python logic.
- ๐ Extract simulation results and generate custom reports.
- ๐งฎ Implement advanced analysis and algorithms using Python.
๐ Why Use py-dss-interface Instead of the COM Interface?
Compared to the COM interface, py-dss-interface provides a modern, Pythonic experience:
- ๐ก Code Completion: Works seamlessly with IDEs like PyCharm for better developer productivity.
- ๐ฆ No OpenDSS Installation Required: No need to install OpenDSS since
py-dss-interfacecomes bundled with a tested version of OpenDSS (Windows and Linux). However, you may also use a different OpenDSS version if desired. Please note that compatibility is only guaranteed for the bundled version. - ๐ Supports Multiple DSS Objects: Interact with multiple OpenDSS objects at the same time.
- ๐ Multi-Platform: Supports both Windows and Linux (pre-built wheels available; build from source if needed).
- โก Better Performance: Some examples comparing performance will be provided later.
- ๐ Version Control Friendly: Avoid breaking your Python code when updating the OpenDSS version on your computer.
๐ป Platform Support
โ Windows
pip install py-dss-interface
๐ง Linux
Pre-built wheels are available for x86_64 and ARM64. Start with pip install:
pip install py-dss-interface
If pip install doesn't work for your environment, you can build from source as described below.
๐ง Build from source (fallback)
To use py-dss-interface on Linux, you'll need to build the OpenDSS C++ engine locally using OpenDSSLinuxCPPForRepo.sh.
-
Clone the repository
git clone https://github.com/PauloRadatz/py_dss_interface.git cd py_dss_interface
-
Build the OpenDSS C++ engine
bash py_dss_interface/OpenDSSLinuxCPPForRepo.sh๐ Note: You'll need tools for building C++ code (e.g.,
g++,cmake, etc.). -
Install the package
pip install path/to/py_dss_interface
๐ฆ Quickstart Example
import py_dss_interface
dss = py_dss_interface.DSS()
dss.text("compile path/to/circuit.dss")
dss.text("solve")
print(dss.circuit.total_power)
๐งช Running Tests
The project includes a comprehensive test suite using pytest. Tests can be run individually or together depending on your platform and backend.
Basic Test Execution
# Run all tests
pytest tests/
Test Execution Modes
Automatic Individual Execution (Default)
On Linux or when using the C++ backend on Windows, tests automatically run individually in separate subprocesses to prevent memory leak issues. This is handled automatically by the test framework.
Running All Tests Together
To run all tests together (faster execution, but may have memory issues if there are leaks), use the --run-together flag:
# Run all tests together (even on Linux/C++)
pytest tests/ --run-together
Note: Use --run-together when you want to test memory management fixes or need faster test execution. Individual execution is recommended for normal testing to prevent memory leaks.
Test Summary
When tests run individually, a detailed summary is displayed at the end showing:
- Total tests executed
- Passed/Failed/Error counts
- List of failed tests (if any)
- Execution time
๐ Documentation
๐ Full documentation available at: ๐ https://py-dss-interface.readthedocs.io/en/latest/
๐ Learn More
๐ Comprehensive Online Course
The best way to master py-dss-interface is through the official course:
๐ Try the first modules for free
๐บ YouTube Playlists
- ๐ Why Use Python with OpenDSS
- ๐ py-dss-interface Version 2 Overview
- ๐ Version 1 Introduction
๐งฉ Tools Built on py-dss-interface
-
๐ OpenDER_Interface: EPRI's tool for Distributed Energy Resource simulation and control, powered by
py-dss-interface. More on OpenDER: GitHub -
๐ 2023 Hosting Capacity Webinar: Examples shown using this package.
-
๐ง py-dss-toolkit: A new package built on top of
py-dss-interface, available in PyPI.
๐ Where to Find Examples
- ๐ OpenDSS Repository
- ๐ Local Installation:
After installing OpenDSS on your Windows computer, navigate to:
C:\\Program Files\\OpenDSS\\Examples\\Python\\py-dss-interface
๐ค Community and Support
- ๐ฌ Open an Issue on GitHub for bugs or feature requests.
- ๐ Contributions welcome! Please open a pull request with clear descriptions.
- ๐ป Questions? Join discussions in the OpenDSS user forums or comment on relevant YouTube videos.
๐ How to Cite
If you use py-dss-interface in your academic work, please reference it as follows:
APA Style:
Radatz, P. (2026). py-dss-interface: A Python package that interfaces with OpenDSS powered by EPRI (Version 2.3.0) [Computer software]. GitHub. https://github.com/PauloRadatz/py_dss_interface
BibTeX Entry:
@software{radatz2026pydssinterface,
author = {Paulo Radatz},
title = {py-dss-interface: A Python package that interfaces with OpenDSS powered by EPRI},
year = {2026},
version = {2.3.0},
url = {https://github.com/PauloRadatz/py_dss_interface}
}
๐ Acknowledgements
Developed and maintained by Paulo Radatz, with support from EPRI and the global OpenDSS community.
Special thanks to รnio Viana and Rodolfo Pilar Londero for their contributions to the first version of this tool.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_dss_interface-2.3.0-py3-none-win_amd64.whl.
File metadata
- Download URL: py_dss_interface-2.3.0-py3-none-win_amd64.whl
- Upload date:
- Size: 9.0 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6cbbf08209e516f56f4ed06fb460e3646bc47901af2f2830a6d049878928b26
|
|
| MD5 |
2568909f6ceb927194a9562cc70b582d
|
|
| BLAKE2b-256 |
7357c7c29bc844dac9a71a3170473ae44f32ae515df479dfa4221a6816b76201
|
File details
Details for the file py_dss_interface-2.3.0-py3-none-win32.whl.
File metadata
- Download URL: py_dss_interface-2.3.0-py3-none-win32.whl
- Upload date:
- Size: 9.0 MB
- Tags: Python 3, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae19e594f8bac9ab685acdbacad597ff65d10a22c03c44c3be7d80f71c53078b
|
|
| MD5 |
9a5f6186f0a1c64b72cf486c4e60bc76
|
|
| BLAKE2b-256 |
c6c2ad1de36489a3d50b84e0ad2500180ce1cc5fcc02a2c5171a38c575532b84
|
File details
Details for the file py_dss_interface-2.3.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: py_dss_interface-2.3.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 9.2 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
288485e91ad4c1c7f83887da0f25d567594f5cf9f4c8242e8a6a90f2c2ab190c
|
|
| MD5 |
348c112b8df61fe373a289994a80474f
|
|
| BLAKE2b-256 |
73e660d186be0eedbe3951041894004787803662d825ef93afc010644708c261
|
File details
Details for the file py_dss_interface-2.3.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.
File metadata
- Download URL: py_dss_interface-2.3.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
- Upload date:
- Size: 9.1 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8de8f9ce8fece7c26a96d74bc1dbfc72e53867e9af0c5e20ab0cd3b4dbc7722b
|
|
| MD5 |
64002f47d648e65e8c1eecd62a5a72bb
|
|
| BLAKE2b-256 |
f53bca5328203876aa067a62ca2e11dd7398a3090db65820807716c6c07f05d7
|