Skip to content

Support offline installation of additional plugin dependencies #417

Closed

Description

@PierreRaybaut

Summary

Allow DataLab Desktop plugins to use additional dependencies, including compatible native libraries, without requiring users to modify DataLab's Python environment. A complete local plugin catalog must work without Internet access, including in the standalone application.

Problem

The current installer only accepts plugins whose dependencies are already supplied by the host. This prevents catalog installation of otherwise pure-Python plugins relying on specialized packages, such as a TANGO acquisition plugin requiring PyTango.

Users of disconnected laboratory workstations need both a complete distribution of installation files and precise documentation available locally, rather than instructions that depend on accessing websites.

Proposed functionality

  • Keep plugin wheels pure Python, but allow separate dependency wheels, including native wheels matching the host's Python version, ABI and platform.
  • Supply missing dependencies and their transitive requirements through a local dependencies wheelhouse or optional dependency_wheels artifacts referenced by a catalog release.
  • Resolve with pip in a child process, using only approved local wheels during installation: no package-index fallback, compilation or implicit system installation.
  • Protect all versions already provided by DataLab, the Python environment and the shared dependency store. Explicitly reject conflicts instead of upgrading or downgrading those packages.
  • Show the additional packages, versions, sources, sizes and SHA-256 fingerprints before asking for consent.
  • Publish the plugin and its additional dependencies transactionally in user storage, shared by plugins of the same runtime. Activate newly added dependencies after restarting.
  • Keep shared dependencies when a plugin is uninstalled.
  • Add datalab-plugin catalog prepare to download the dependency wheels on a connected reference computer, then distribute the complete catalog to offline computers. build and check remain file-based operations.
  • Include a self-contained offline deployment and troubleshooting guide in the local PDF documentation, with an up-to-date French translation.

Acceptance criteria

  • A complete local catalog installs without Internet access in both Python and standalone Desktop editions; the standalone does not require an external Python interpreter.
  • Native libraries can be imported from the managed store without changing host packages.
  • Missing transitive wheels, incompatible versions, changed artifacts and invalid native paths result in explicit errors without activating a partial installation.
  • Existing plugins without additional dependencies retain their installation and reload behavior.
  • Documentation explains preparation, complete folder transfer, catalog/source-path distinctions, disabling the public URL, catalog priority, mirror layout, updates, restarts and offline troubleshooting.
  • A real TANGO plugin can acquire a signal and an image from a local simulated device after installation, not merely pass an import check.

Scope and deliberate limits

This issue concerns DataLab Desktop only, with integration targeting develop independently of feature/experimental-data-integration. No DataLab-Web behavior change, companion-repository publication, automatic dependency upgrades, per-plugin environments, system drivers or source builds are included. Conflicting versions cannot coexist in this shared-runtime model. Publishing dependency artifacts in the public catalog requires its companion tooling, which is outside the Desktop PR.

Activity

  1. PierreRaybaut commented on Oct 22, 2026

    @PierreRaybaut
    ContributorAuthor

    Implemented by #418, targeting develop from the independent feature/plugin-dependencies branch. The Desktop PR includes the installer, offline catalog preparation, standalone validation, and the self-contained English/French offline documentation. Companion repositories are not pushed by this change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions