# Dependencies Every PLESTY module depends on plesty-lib, so every package plesty-lib requires is installed on every computer in the lab that runs PLESTY. That is why the list is short, and why adding to it follows the rules below. ## Required packages | Package | Why plesty-lib needs it | |---|---| | `numpy` | arrays: the basis of `PlestyArray` and every data type | | `pyserial` | instruments on a serial connection | | `pyvisa` | instruments reached through VISA (USB, Ethernet, GPIB), the usual way to reach SCPI instruments | | `pyusb` | direct USB access, and resetting USB devices | | `pyzmq` | the network connection between a device server and its clients | | `pyyaml` | reading the YAML configuration files every module ships and every experiment reads (see [YAML Configuration](../common/yaml_config.md)) | `pytest` and `plesty-sdk` are needed only to develop plesty-lib, and must never become requirements of the installed package. **A new required package** must be actively maintained, with a release or commits upstream within the last two years, and is added to the table above in the same merge request. Every push also checks all dependencies for known security problems (`pip-audit`, gate 10 of `plesty check`), so a package that stops receiving fixes is noticed and has to be replaced. ## Optional packages: extras A package that only one feature needs, or that is large, compiled or tied to one operating system, is an **extra** instead: listed under `[project.optional-dependencies]` in `pyproject.toml`, imported only inside the function that needs it, and reported by name in the error when it is missing. [Install](../install.md#extras) lists the extras and what each one enables. The packages of the `hdf5`, `fit` and `report` extras are also listed in the `optional` dependency group, which a development install includes by default. The tests in CI install no extras, so without that group the code behind them would never be tested there.