finds.dev← search

// the find

gijzelaerr/python-snap7

★ 806 · Python · MIT · updated Jun 2026

a pure Python S7 communication library for interfacing with Siemens S7 PLCs

Pure Python implementation of the Siemens S7 protocol stack for talking to PLCs — no native libraries, no ctypes, no compiler required. Version 3.0 dropped the C snap7 dependency entirely; version 4.0 (unreleased, main branch) adds S7CommPlus support which is what you actually need for modern S7-1200/1500 hardware. If you're doing industrial automation or IIoT work in Python, this is the most practical option available.

Pure Python with zero native dependencies means it actually installs on Alpine, ARM, and restricted OT environments where getting a .so file compiled is a nightmare. S7CommPlus support in 4.0 closes the biggest real-world gap — S7-1200/1500 with PUT/GET disabled was previously a wall. The test suite is genuinely broad: hypothesis-based property tests, behavioral compatibility tests, conformance tests, stress tests, and actual e2e tests against real PLCs. The multi-variable read optimizer merging scattered reads into minimal PDU exchanges is the kind of thing that matters in production where you're polling hundreds of tags.

The headline feature — S7CommPlus, symbolic addressing, TIA Portal import — is all unreleased and explicitly marked experimental with no stability guarantees. You can't pip install it and get that; you're tracking main. The package rename (snap7 → s7) mid-stream creates friction: documentation, Stack Overflow answers, and existing projects all reference the old import path, and new users will waste time figuring out which API they're actually on. 806 stars for a library targeting industrial control systems is thin — the community is small, which means slow bug turnaround when you hit a PLC-specific edge case. Thread safety documentation exists but the actual guarantees for concurrent multi-PLC polling aren't spelled out clearly enough for production use.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →