> ## Documentation Index
> Fetch the complete documentation index at: https://instro.nominal.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Installation

> Installing instro and Driver Dependencies

## Basic Install

`instro` is published on [PyPI](https://pypi.org/project/instro/), and can be installed using either [`uv`](https://docs.astral.sh/uv/) or `pip`. `instro` supports Python 3.10-3.14.

<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem', alignItems: 'start' }}>
  ```bash theme={null}
  uv add instro
  ```

  ```bash theme={null}
  pip install instro
  ```
</div>

## Additional Packages

`instro` has additional packages for utilizing vendor instruments that require their own dependencies.  These are grouped by individual vendors and by instrument type where useful.

<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem', alignItems: 'start' }}>
  ```bash theme={null}
  # install ni-daq
  uv add "instro[nidaq]"
  # or install all DAQs
  uv add "instro[daq]"
  # install everything
  uv add "instro[all]"
  ```

  ```bash theme={null}
  # install ni-daq
  pip install "instro[nidaq]"
  # or install all DAQs
  pip install "instro[daq]"
  # install everything
  pip install "instro[all]"
  ```
</div>

<Info>These packages supply Python dependencies. See [Driver Dependencies](#driver-dependencies) for external installers required for some instruments.</Info>
Here is a table of available packages:

| Instrument Type | Package      | Contents                            |
| --------------- | ------------ | ----------------------------------- |
| **All**         | `all`        | All drivers in this table           |
| **DAQ**         | `daq`        | All DAQ drivers                     |
|                 | `nidaq`      | NI DAQ package                      |
|                 | `mccdaq`     | Measurement Computing (MCC) package |
|                 | `labjack`    | LabJack package                     |
| **I2C**         | `i2c`        | All I2C packages                    |
|                 | `aardvark`   | TotalPhase Aardvark package         |
| **EtherNet**    | `ethernetip` | EtherNet/IP support                 |
| **Other**       | `contrib`    | Community-contributed drivers       |
|                 | `unstable`   | Experimental unstable modules       |

## Using Nominal Connect

If you're a Nominal Connect user, you don't need to install `instro` yourself. Just add it to your packages list in your `app.connect` file, and Nominal Connect will install it into your Python environment automatically. Use any of the [additional packages](#additional-packages) above to pull in more support.

```yaml theme={null}
python:
  packages:
    - instro[daq]
```

## Driver Dependencies

`instro` depends on external software to be installed for various hardware interactions to be successful.

<Note>
  **Understanding the distinction**: These vendor-installable drivers are **different from** the driver classes that an `Instrument` is composed with:

  * **Vendor-installable drivers**: External libraries/drivers developed by instrument vendors that must be installed to your system operating system.
  * **`instro` driver classes**: The vendor/model-specific Python code that `Instrument` uses to interact with the external software drivers.
</Note>

The table below shows which vendor drivers are required for which `instro` instrument types:

| Vendor Driver                        | Required For                                             | Used By instro Drivers                |
| ------------------------------------ | -------------------------------------------------------- | ------------------------------------- |
| **VISA**                             | SCPI/VISA-based instruments (PSUs, ELoads, Keysight DAQ) | All VISA-based driver implementations |
| **NI-DAQmx**                         | National Instruments DAQ devices                         | `NIDAQDriver`                         |
| **LJM (LabJack Module)**             | LabJack T-Series devices                                 | `LabJackTSeriesDriver`                |
| **MCC Universal Library (`mcculw`)** | Measurement Computing DAQ devices                        | `MCCDriver`                           |
| **Total Phase USB Drivers**          | Total Phase Aardvark I2C/SPI Host Adapter                | `Aardvark`                            |

## VISA

### Used By

VISA (Virtual Instrument Software Architecture) is used by `instro` for all SCPI/VISA based instrument connections. Some support is provided when you install `instro`, but you may need additional drivers.

### Instro installs

Installing `instro` also installs `pyvisa`, `pyvisa-py`, and the full set of `pyvisa-py` backend libraries (`pyusb`, bundled libusb via `libusb-package`, `pyserial`, `psutil`, `zeroconf`, `pyvicp`, and `gpib-ctypes`). TCP/IP, USB-TMC, serial, HiSLIP, and VICP resources work with no extra setup.

* **pyvisa** (Python VISA library)
* **pyvisa-py** (default Python backend)
* **pyusb + libusb** (USB-TMC backend; libusb ships bundled via `libusb-package`)
* **pyserial** (ASRL/serial backend)
* **psutil, zeroconf, pyvicp** (TCPIP discovery, HiSLIP discovery, and VICP support)

### You may need

* **Native GPIB driver**: NI-488.2 for NI GPIB interfaces, or linux-gpib on Linux.
* **Vendor VISA runtimes** (optional; required for PXI/VXI or vendor-specific transports)

## NI-DAQmx

NI-DAQmx is the National Instruments driver for their DAQ devices. It must be installed before using National Instruments DAQ devices with `instro`.

### Used By

* **`InstroDAQ`**: National Instruments DAQ devices (via `NIDAQDriver`)

### Installation

1. Download and install NI-DAQmx from the [National Instruments website](https://www.ni.com/en/support/downloads/drivers/download.ni-daq-mx.html)
2. Verify installation by opening NI-MAX (Measurement & Automation Explorer) and confirming your device appears

### Alternative Installation (Python)

You can also install NI-DAQmx via the `nidaqmx` Python package's driver installer:

```bash theme={null}
python -m nidaqmx installdriver
```

## LJM (LabJack Module)

LJM is the LabJack Module library required to communicate with LabJack T-Series devices (T4, T7, T8).

### Used By

* **`InstroDAQ`**: LabJack T-Series devices (via `LabJackTSeriesDriver`)

### Installation

1. Download LJM from the [LabJack website](https://labjack.com/support/software/installers/ljm)
2. Install the LJM package for your operating system
3. The Python bindings (`labjack.ljm`) are typically included with the LJM installation

## MCC Universal Library (`mcculw`)

The MCC Universal Library is the Measurement Computing driver stack for their USB and Ethernet DAQ devices. It must be installed before using MCC devices with `instro`.

### Used By

* **`InstroDAQ`**: Measurement Computing DAQ devices (via `MCCDriver`)

### Installation

1. Download and install the MCC DAQ Software (includes InstaCal and the Universal Library) from the [Measurement Computing website](https://digilent.com/reference/software/instacal/start).
2. Open **InstaCal** and confirm your device appears in the board list. Note the device's unique ID. You pass this as the `device_id` argument to `MCCDriver()` when constructing the driver handed to `InstroDAQ`.
3. The Python bindings (`mcculw`) are installed automatically when you install the `instro[mccdaq]` or `instro[daq]` extras.

<Note>
  The MCC Universal Library is currently only available on Windows. MCC DAQ support in `instro` is therefore limited to Windows hosts.
</Note>

## Total Phase USB Drivers

Total Phase USB Drivers are required to communicate with Total Phase Aardvark I2C/SPI Host Adapter devices.

### Used By

* **`I2CInterface`**: Total Phase Aardvark I2C/SPI Host Adapter (via `Aardvark`)

### Installation

1. Download the USB Drivers from the [Total Phase website](https://www.totalphase.com/products/usb-drivers/)

***
