8. Split Transport Dependencies into Optional Extras#
Date: 2025-09-30
Related: PR #221
Status#
Accepted
Context#
Currently all transport dependencies are installed regardless of which transports users actually needed.
Problems with required dependencies:
Minimal installations bloated by unused transport dependencies
Unclear dependency relationships for each transport
No way to install just the core FastCS functionality
Decision#
Split transport dependencies into optional extras in pyproject.toml, allowing users to install only what they need.
The core FastCS package now requires only essential dependencies (pydantic, numpy, ruamel.yaml, IPython). Each transport is available as an optional extra, with convenience groups like [all], [epics], and [dev] for common installation patterns.
Key architectural changes:
Core dependencies: pydantic, numpy, ruamel.yaml, IPython
Individual transport extras:
[epicsca],[epicspva],[tango],[graphql],[rest]Convenience groups:
[epics],[all],[dev],[demo]Each transport declares its own dependencies explicitly
Consequences#
Benefits#
Minimal Core Installation: Users can install FastCS core without transport dependencies
Explicit Dependency Relationships: Each transport declares what it needs
Flexible Installation: Users choose exactly what they need:
pip install fastcs[epicspva,rest]Development Convenience:
pip install fastcs[dev]includes everything for developmentClear Documentation: Installation commands are self-documenting
Installation Patterns#
Minimal (core only):
pip install fastcs
Single transport:
pip install fastcs[epicspva] # EPICS PVA
pip install fastcs[rest] # REST API
Multiple transports:
pip install fastcs[epics,rest] # EPICS CA + PVA + REST
All transports:
pip install fastcs[all]
Development:
pip install fastcs[dev]