diff --git a/csaxs_bec/devices/allied_vision_cameras/README.md b/csaxs_bec/devices/allied_vision_cameras/README.md index e0d1b43..8ff9274 100644 --- a/csaxs_bec/devices/allied_vision_cameras/README.md +++ b/csaxs_bec/devices/allied_vision_cameras/README.md @@ -29,11 +29,24 @@ needed). environment, same as the IDS camera tests run without `pyueye`. - **Talking to real hardware** — two things, both local to the machine running the device server (or wherever you instantiate `AlliedVisionAravisCamera`/`Camera` directly): - 1. **PyGObject** (`pygobject`, the `gi` module) — already listed in `pyproject.toml`, - pinned to `<3.52`. It's the GObject Introspection bridge, not Aravis itself. The pin - matters: PyGObject 3.52+ requires `girepository-2.0` (GLib >=2.80 / - gobject-introspection >=1.80), which RHEL9's system packages don't provide (only the - older `girepository-1.0` via `gobject-introspection` 1.68) — `pip install pygobject` + 1. **PyGObject** (`pygobject`, the `gi` module) — the GObject Introspection bridge, not + Aravis itself. It is **not** installed by a plain `pip install csaxs_bec` — it lives + in the `allied_vision` extra (`pyproject.toml`'s `[project.optional-dependencies]`), + pinned to `<3.52`: + ```bash + pip install csaxs_bec[allied_vision] + # or, into an existing environment: + pip install "pygobject<3.52" + ``` + It's opt-in rather than a hard dependency because `pygobject` ships no PyPI wheels — + `pip install` always compiles it from source, which needs the OS + `gobject-introspection` dev package present *at install time* (see below). As a + mandatory dependency this broke plain `pip install csaxs_bec` on CI and on Read the + Docs, neither of which has that OS package (and RTD's build image isn't something we + can add packages to) — so install it explicitly only on hosts that actually run this + camera. The version pin matters too: PyGObject 3.52+ requires `girepository-2.0` (GLib + >=2.80 / gobject-introspection >=1.80), which RHEL9's system packages don't provide + (only the older `girepository-1.0` via `gobject-introspection` 1.68) — installing it unpinned fails at build time with `Dependency 'girepository-2.0' is required but not found`. Unpin once deployment hosts move to a newer GLib/gobject-introspection. 2. **Aravis** — a native C library with a GObject Introspection typelib. It is *not* a @@ -43,9 +56,11 @@ needed). ### Installing PyGObject + Aravis (Linux) -`pygobject` alone (`pip install pygobject`, already in `pyproject.toml`) only gets you the -`gi` bridge — `import gi; gi.require_version("Aravis", "0.8")` will raise until the Aravis -library and its typelib are installed on the system. +Install the OS Aravis/gobject-introspection packages **first** — `pip install +csaxs_bec[allied_vision]` (or `pip install "pygobject<3.52"`) needs the +`gobject-introspection-1.0` pkg-config file present to build, and even once installed, +`import gi; gi.require_version("Aravis", "0.8")` will raise until the Aravis library and +its typelib are also installed on the system. 1. **Debian/Ubuntu** — Aravis and its GObject Introspection bindings are packaged directly: ```bash diff --git a/pyproject.toml b/pyproject.toml index 3adeeaa..e8e6c23 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,12 +22,6 @@ dependencies = [ "rich", "pyepics", "pyueye", # for the IDS uEye camera - "pygobject<3.52", # for the AlliedVision Alvium camera (native Aravis/GenICam, no EPICS IOC) - # pinned below 3.52: that version switched to requiring - # girepository-2.0 (GLib >=2.80/gobject-introspection >=1.80), - # which RHEL9's system packages don't provide (only the older - # girepository-1.0 via gobject-introspection 1.68) -- unpin once - # deployment hosts are upgraded past that. "bec_widgets", "zmq", "opencv-python", @@ -36,6 +30,22 @@ dependencies = [ ] [project.optional-dependencies] +allied_vision = [ + "pygobject<3.52", # for the AlliedVision Alvium camera (native Aravis/GenICam, no EPICS IOC) + # pinned below 3.52: that version switched to requiring + # girepository-2.0 (GLib >=2.80/gobject-introspection >=1.80), + # which RHEL9's system packages don't provide (only the older + # girepository-1.0 via gobject-introspection 1.68) -- unpin once + # deployment hosts are upgraded past that. + # + # Kept out of the default dependency set: pygobject ships no + # PyPI wheels, so `pip install` always builds it from source, + # which needs the OS gobject-introspection dev package present + # at *install* time. As a hard dependency this broke plain + # `pip install csaxs_bec` on CI and on Read the Docs (neither + # has that OS package, and RTD's build image isn't ours to + # change) -- see csaxs_bec/devices/allied_vision_cameras/README.md. +] dev = [ "black", "copier",