{"library":"odxtools","title":"ODX Tools","description":"odxtools is a Python library providing utilities to work with the ODX (Open Diagnostic Data eXchange) standard, primarily for automotive diagnostics. It enables parsing and internalizing ODX diagnostic database files, as well as encoding and decoding diagnostic messages for Electronic Control Units (ECUs). The library is actively maintained with frequent minor releases and occasional major version updates; the current version is 11.0.6.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install odxtools"],"cli":{"name":"odxtools","version":"odxtools 11.1.0"}},"imports":["import odxtools"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import odxtools\nimport os\n\n# This example requires an actual .pdx file. \n# For demonstration, we'll assume 'path/to/my_ecu.pdx' exists.\n# Replace 'path/to/my_ecu.pdx' with your ODX database file.\n# You can find example .pdx files in the odxtools GitHub repository.\n\n# Create a dummy .pdx file for demonstration purposes if it doesn't exist\n# In a real scenario, you would have your actual ODX/PDX file.\npdx_file_path = 'my_ecu.pdx'\nif not os.path.exists(pdx_file_path):\n    with open(pdx_file_path, 'w') as f:\n        f.write(\"<ODXLINK><DATABASE><CONTAINER name='DummyECU'/></DATABASE></ODXLINK>\")\n    print(f\"Created a dummy file: {pdx_file_path}\")\n\ntry:\n    # Load an ODX database from a .pdx file\n    db = odxtools.load_pdx_file(pdx_file_path)\n\n    # List available ECUs (Electronic Control Units)\n    print(f\"Loaded database contains {len(db.ecus)} ECUs:\")\n    for ecu in db.ecus:\n        print(f\"- {ecu.short_name} (ID: {ecu.oid if hasattr(ecu, 'oid') else 'N/A'})\")\n\n    # Example: Accessing services of the first ECU (if any)\n    if db.ecus:\n        first_ecu = db.ecus[0]\n        print(f\"\\nServices offered by {first_ecu.short_name}:\")\n        if hasattr(first_ecu, 'services') and first_ecu.services:\n            for service in first_ecu.services:\n                print(f\"- {service.short_name}\")\n        else:\n            print(\"  No services found for this ECU in the dummy file.\")\n\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")\nfinally:\n    # Clean up the dummy file\n    if os.path.exists(pdx_file_path):\n        os.remove(pdx_file_path)\n        print(f\"Cleaned up dummy file: {pdx_file_path}\")\n","lang":"python","description":"This quickstart demonstrates how to load an ODX database from a .pdx file and iterate through the available ECUs and their services. It includes a placeholder for a PDX file, which you would replace with your actual diagnostic database.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"9.7.0","pypi_latest":"11.1.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":4.4,"avg_import_s":1.13,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.11,"mem_mb":13.9,"disk_size":"42.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.4,"import_time_s":0.8,"mem_mb":13.9,"disk_size":"43M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.5,"mem_mb":15.8,"disk_size":"47.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.4,"import_time_s":1.37,"mem_mb":15.8,"disk_size":"48M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.29,"mem_mb":15.5,"disk_size":"38.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":1.39,"mem_mb":15.5,"disk_size":"39M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.27,"mem_mb":16.5,"disk_size":"38.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.3,"import_time_s":1.23,"mem_mb":16.5,"disk_size":"39M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.75,"mem_mb":9.2,"disk_size":"38.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"odxtools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.7,"import_time_s":0.63,"mem_mb":9.2,"disk_size":"39M"}]}}