{"library":"pyvisa","title":"PyVISA","description":"PyVISA is a Python package that provides bindings to the \"Virtual Instrument Software Architecture\" (VISA) library. It enables control of various measurement devices and test equipment (e.g., oscilloscopes, multimeters, power supplies) through different interfaces like GPIB, RS232, USB, and Ethernet. It acts as a frontend to either a vendor-provided VISA shared library (like NI-VISA or Keysight IO Library Suite) or a pure Python implementation like PyVISA-py. The library is actively maintained, with the current version being 1.16.2, and receives regular updates.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install -U pyvisa","pip install -U pyvisa-py"],"cli":null},"imports":["from pyvisa import ResourceManager"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport pyvisa\n\n# For simulation or when no physical VISA library is installed, use the PyVISA-py backend\n# Otherwise, PyVISA will try to find a system-installed VISA library (e.g., NI-VISA)\n# You can also explicitly specify a backend or path: rm = pyvisa.ResourceManager('@py')\n# For a specific VISA library path: rm = pyvisa.ResourceManager('/path/to/visa.dll')\n\nrm = pyvisa.ResourceManager()\n\ntry:\n    # List available resources (instruments)\n    resources = rm.list_resources()\n    print(f\"Available resources: {resources}\")\n\n    if not resources:\n        print(\"No instruments found. Ensure your instruments are connected and the VISA backend is correctly configured (e.g., NI-VISA or PyVISA-py).\")\n    else:\n        # Open the first available instrument, or a specific one if known\n        # Replace 'YOUR_INSTRUMENT_ADDRESS' with an actual address from rm.list_resources()\n        # e.g., 'GPIB0::12::INSTR', 'ASRL1::INSTR', 'USB0::0xXXXX::0xXXXX::SN::INSTR', 'TCPIP0::192.168.1.100::INSTR'\n        # For this example, we'll try to connect to a dummy address if no real one is found\n        # In a real scenario, you would select an actual instrument from 'resources'\n        instrument_address = os.environ.get('PYVISA_INSTRUMENT_ADDRESS', resources[0] if resources else 'ASRL1::INSTR') # Fallback if no resources\n\n        if instrument_address.startswith('ASRL') and 'ASRL1::INSTR' in resources:\n             # Special handling for serial, often requires baud_rate\n             # This is a placeholder; actual baud_rate must match the instrument\n             inst = rm.open_resource(instrument_address, baud_rate=9600)\n             inst.write_termination = '\\n'\n             inst.read_termination = '\\n'\n        else:\n            inst = rm.open_resource(instrument_address)\n\n        # Query the instrument's identification string\n        idn = inst.query('*IDN?')\n        print(f\"Instrument ID: {idn.strip()}\")\n\n        # Example: Write a command and read a response\n        # inst.write('MEAS:VOLT:DC?') # Example SCPI command\n        # response = inst.read()\n        # print(f\"Measurement: {response.strip()}\")\n\n        inst.close()\n        print(\"Instrument connection closed.\")\n\nexcept pyvisa.VisaIOError as e:\n    print(f\"VISA I/O Error: {e}\")\n    print(\"Ensure the VISA backend is installed and configured, and the instrument address is correct.\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")","lang":"python","description":"This quickstart demonstrates how to initialize the ResourceManager, list available instruments, open a connection to an instrument, query its identification string, and then close the connection. It includes basic error handling and notes for serial configuration. Replace 'YOUR_INSTRUMENT_ADDRESS' with an actual resource string for your device. If no physical VISA backend is found, it automatically uses the PyVISA-py backend if installed.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"1.14.1","pypi_latest":"1.16.2","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.8,"avg_import_s":0.25,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":7.2,"disk_size":"19.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":7.2,"disk_size":"20.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.15,"mem_mb":7.2,"disk_size":"20M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.15,"mem_mb":7.2,"disk_size":"21M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.39,"mem_mb":8.1,"disk_size":"22.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.39,"mem_mb":8.1,"disk_size":"22.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.33,"mem_mb":8.1,"disk_size":"23M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.34,"mem_mb":8.1,"disk_size":"23M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.26,"mem_mb":8.1,"disk_size":"13.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.27,"mem_mb":8.1,"disk_size":"14.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.28,"mem_mb":8.1,"disk_size":"14M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.3,"mem_mb":8.1,"disk_size":"15M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.24,"mem_mb":8.2,"disk_size":"13.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.25,"mem_mb":8.2,"disk_size":"14.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.26,"mem_mb":8.2,"disk_size":"14M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.25,"mem_mb":8.2,"disk_size":"15M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.17,"mem_mb":7,"disk_size":"19.3M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.18,"mem_mb":7,"disk_size":"19.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.15,"mem_mb":7,"disk_size":"20M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"-U","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.18,"mem_mb":7,"disk_size":"20M"}]}}