# 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.11-3.14.

```bash
uv add instro
```

```bash
pip install instro
```

## 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.

```bash
# install ni-daq
uv add "instro[nidaq]"
# or install all DAQs
uv add "instro[daq]"
# install everything
uv add "instro[all]"
```

```bash
# install ni-daq
pip install "instro[nidaq]"
# or install all DAQs
pip install "instro[daq]"
# install everything
pip install "instro[all]"
```

> **Note**
>
> These packages supply Python dependencies. See [Driver Dependencies](https://dev.nominal.io/instro/installation.md#driver-dependencies) for external installers required for some instruments.

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 |
| **Plotting** | `plot` | Plotly publisher, with `anywidget` for live notebook plots |
| **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](https://dev.nominal.io/instro/installation.md#additional-packages) above to pull in more support.

```yaml
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.

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
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.

## 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/)
