{"library":"python-snap7","title":"python-snap7","description":"python-snap7 is a pure Python S7 communication library for Siemens PLCs, implementing the full protocol stack (TPKT, COTP, S7) in Python. As of version 3.0.0, it no longer requires the underlying Snap7 C library. It provides an interface for connecting to and interacting with Siemens S7-300, S7-400, S7-1200, and S7-1500 PLCs. The library is actively maintained with a moderate release cadence, with major versions introducing significant architectural changes.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install python-snap7"],"cli":null},"imports":["from snap7.client import Client"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import snap7\nfrom snap7.snap7types import S7AreaDB\nimport os\n\n# Configure PLC connection details\nplc_ip = os.environ.get('PLC_IP', '192.168.0.100') # Placeholder IP\nplc_rack = int(os.environ.get('PLC_RACK', '0'))\nplc_slot = int(os.environ.get('PLC_SLOT', '1'))\n\nclient = snap7.client.Client()\n\ntry:\n    client.connect(plc_ip, plc_rack, plc_slot)\n    if client.get_connected():\n        print(f\"Successfully connected to PLC at {plc_ip}\")\n\n        # Example: Read 10 bytes from Data Block (DB) number 10, starting at byte 0\n        db_number = 10\n        start_byte = 0\n        size = 10\n        data_buffer = client.db_read(db_number, start_byte, size)\n        print(f\"Read from DB{db_number}, Start:{start_byte}, Size:{size}: {data_buffer}\")\n\n        # Example: Write 10 bytes to Data Block (DB) number 10, starting at byte 0\n        # Make sure the PLC is configured to allow writes.\n        # new_data = bytearray([0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A])\n        # client.db_write(db_number, start_byte, new_data)\n        # print(f\"Wrote to DB{db_number}, Start:{start_byte}, Size:{size}: {new_data}\")\n\n    else:\n        print(\"Failed to connect to PLC.\")\n\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")\nfinally:\n    if client.get_connected():\n        client.disconnect()\n        print(\"Disconnected from PLC.\")","lang":"python","description":"This quickstart demonstrates how to connect to a Siemens PLC using `snap7.client.Client`, read 10 bytes from Data Block (DB) 10, and then disconnect. Ensure the PLC's IP address, rack, and slot are correctly configured. Remember to enable PUT/GET communication on your PLC for the library to function correctly.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"2.0.2","pypi_latest":"3.0.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.7,"avg_import_s":0.15,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.14,"mem_mb":4.9,"disk_size":"18.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.11,"mem_mb":4.9,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.18,"mem_mb":5.9,"disk_size":"20.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.17,"mem_mb":5.9,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.18,"mem_mb":6.3,"disk_size":"12.3M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.19,"mem_mb":6.3,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.17,"mem_mb":6.7,"disk_size":"12.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.18,"mem_mb":6.8,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"python-snap7","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":4.7,"disk_size":"17.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"python-snap7","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.11,"mem_mb":4.7,"disk_size":"18M"}]}}