{"library":"patchelf","title":"patchelf","description":"Patchelf is a small utility for modifying existing ELF executables and libraries. It can change the dynamic linker (interpreter) of executables and adjust the RPATH/RUNPATH, which specifies directories where the dynamic linker should look for shared libraries. The current version is 0.17.2.4. The project has an active development cycle, often maintaining multiple parallel release branches for bug fixes and new features, with frequent backports.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install patchelf"],"cli":{"name":"patchelf","version":"patchelf 0.17.2"}},"imports":["import subprocess\nsubprocess.run(['patchelf', '--print-rpath', '/path/to/executable'], check=True)"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import subprocess\nimport os\n\n# Create a dummy executable for demonstration (requires clang/gcc)\n# In a real scenario, you'd use an existing ELF binary.\nwith open('my_test_program.c', 'w') as f:\n    f.write('int main() { return 0; }')\nsubprocess.run(['gcc', '-o', 'my_executable', 'my_test_program.c'], check=True)\n\nprint(\"Original RPATH:\")\ntry:\n    result = subprocess.run(['patchelf', '--print-rpath', './my_executable'], capture_output=True, text=True, check=True)\n    print(result.stdout.strip())\nexcept subprocess.CalledProcessError as e:\n    if 'has no RPATH' in e.stderr:\n        print('No RPATH found.')\n    else:\n        raise\n\nprint(\"\\nSetting RPATH to '$ORIGIN/lib'\")\nsubprocess.run(['patchelf', '--set-rpath', '$ORIGIN/lib', './my_executable'], check=True)\n\nprint(\"\\nNew RPATH:\")\nresult = subprocess.run(['patchelf', '--print-rpath', './my_executable'], capture_output=True, text=True, check=True)\nprint(result.stdout.strip())\n\n# Clean up dummy files\nos.remove('my_test_program.c')\nos.remove('my_executable')","lang":"python","description":"This quickstart demonstrates how to use the `patchelf` command-line utility from Python to modify the RPATH of an ELF executable. It first creates a dummy executable (requires a C compiler like GCC or Clang), prints its original RPATH (if any), sets a new RPATH, and then prints the modified RPATH.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"0.17.2.4","pypi_latest":"0.17.2.4","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.5,"avg_import_s":0.02,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"17.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"19.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.02,"mem_mb":1,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":0.8,"disk_size":"11.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0.02,"mem_mb":0.8,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":1,"disk_size":"11.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.02,"mem_mb":0.8,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"17.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"patchelf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"18M"}]}}