Skip to content

Dependencies: Relax version pinning on transitive dependencies #239

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

amotl
Copy link
Contributor

@amotl amotl commented Jun 9, 2025

About

Locking down transitive dependencies to patch release versions and applying them as main package runtime dependency constraints isn't always the best option when aiming to cooperate with other packages.

Problem

This became apparent with dependencies of marshmallow and requests, making it difficult to use ingestr in a wider ecosystem together with other packages in the same Python environment, either as a library, or just installed side-by-side, due to package version conflicts. 1

[...] because croud==1.13.0 depends on marshmallow==3.22.0 and ingestr==0.13.52 depends on marshmallow==3.26.1 [...], installing both together doesn't work.

Thoughts

Application builds of ingestr might take a different route, e.g. by using separate requirements.txt files that include the whole shebang, using a uv pip compile incantation that omits the --no-deps option flag.

References

Footnotes

@karakanb
Copy link
Contributor

Thanks for the PR.

ingestr is primarily built and distributed as a CLI tool rather than a library. In order to merge this, we would need to figure out a way of releasing the CLI with strict dependencies while allowing a more relaxed version for library builds, for which I don't have an idea at the moment. I am happy to hear if you have any proposals, but at the moment I don't think we can move forward with this as is.

@amotl
Copy link
Contributor Author

amotl commented Jun 10, 2025

Hi @karakanb. Thanks for your swift reply.

ingestr is primarily built and distributed as a CLI tool [...]
we would need to figure out a way of releasing the CLI with strict dependencies while allowing a more relaxed version for library builds [...]
I am happy to hear if you have any proposals [...]

We hear you. I am happy to provide proposals to bring both details together optimally. As I am just learning ingestr, can I humbly ask you to provide pointers to where the CLI tool building and distribution takes place [if there are others than below]?

Is it mostly about building the OCI image, driven by workflows/release.yml, or are there also other distribution variants to be considered, like standalone binaries, or other variants we are currently not thinking of?

Otherwise, specifically when runtime dependencies are locked down to
patch release versions, ingestr does not cooperate well with other
packages.

This became apparent with dependencies of `marshmallow` and `requests`,
making it difficult to use ingestr in a wider ecosystem together with
other packages in the same Python environment, either as a library,
or just installed side-by-side.

Application builds of ingestr might take a different route, e.g. by
using separate `requirements.txt` files that include the whole shebang,
using a `uv pip compile` incantation that omits the `--no-deps` option
flag.
@amotl amotl marked this pull request as draft June 10, 2025 19:53
@karakanb
Copy link
Contributor

@amotl thanks for helping with this. The two ways we distribute ingestr currently are:

  • the docker image, as you have identified
  • the Makefile commands for build and upload-release which allow us to release ingestr as a CLI tool in PyPI

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants