MrlixiangWE opened a new issue, #175:
URL: https://github.com/apache/otava/issues/175

   `pip install apache-otava` installs 364.3 MB across 48 packages. A user who 
only reads CSV files needs 153.5 MB across 19 of them; the rest is there for 
integrations they may never configure. #55 raises the same thing from the 
dependency-count side.
   
   | extra | covers | needs | cost over core |
   |---|---|---|---|
   | — | CSV, JSON, HistoStat, Graphite, analysis | stdlib only | core is 153.5 
MB / 19 pkgs |
   | `influxdb` | importer | influxdb3-python | +131.9 MB / +5 pkgs |
   | `bigquery` | importer + `--update-bigquery` | google-cloud-bigquery | 
+74.1 MB / +22 pkgs |
   | `slack` | `--notify-slack` | slack-sdk | +4.6 MB / +1 pkg |
   | `grafana` | `--update-grafana`, `remove-annotations` | requests | +3.9 MB 
/ +5 pkgs |
   | `postgres` | importer + `--update-postgres` | pg8000 | +1.7 MB / +3 pkgs |
   
   Sizes measured on Python 3.14, wheels only.
   
   | command | installs |
   |---|---|
   | `pip install apache-otava` | core, 153.5 MB |
   | `pip install "apache-otava[bigquery]"` | core + BigQuery |
   | `pip install "apache-otava[bigquery,postgres]"` | core + both |
   | `pip install "apache-otava[all]"` | everything, as today |
   | `docker pull apache/otava` | unchanged, the Dockerfile installs `[all]` |
   
   Core is always there and the extras only add to it, so there is one package 
name and one thing to learn. An existing install that upgrades without naming 
an extra drops to the core: CSV, JSON, HistoStat and Graphite users would see 
no difference, and everyone else gets a message naming the extra to add. 
Keeping `pip install apache-otava` complete would need a second distribution, 
since extras only add, and that costs a second wheel and sdist to sign and 
publish on every release.
   
   `main.py` imports `slack_sdk` at module level, and `config.py` imports the 
configuration dataclasses from `bigquery.py`, `postgres.py`, `influxdb.py` and 
`grafana.py`, each of which imports its client at module level, so `otava 
--help` currently needs all five installed. The extras would come with:
   
   - moving the third-party imports into the client constructors, with 
`TYPE_CHECKING` imports for the annotations, so the CLI, the config parser and 
the analysis core stay importable
   - a small helper that reports `pip install 'apache-otava[bigquery]'` when a 
package is missing, instead of an ImportError raised from an unrelated module
   - constructing the Slack notifier lazily. `Otava.__init__` calls 
`__maybe_create_slack_notifier()` unconditionally and `config.py` always builds 
a `SlackConfig`, so the `if not self.__conf.slack` guard never fires. 
`__get_grafana`, `__get_postgres` and `__get_bigquery` next to it are all lazy
   
   `uv sync --all-extras --dev` and `tox -e py` still install everything, so 
the current CI matrix is unaffected; a core-only job would keep the smaller 
path from regressing.
   
   @Gerrrr, is this something the project wants? Or do you have other 
suggestions? I'd be glad to open a PR if you want it.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to