3 ms·
It's a fundamental design issue with Python package management that makes it impossible to pin the version of build-time dependencies. You can do everything see
by ynik 3y ago
It's a fundamental design issue with Python package management that makes it impossible to pin the version of build-time dependencies.
You can do everything seemingly right, with pip-tools creating lockfiles containing hashes of downloaded packages, stuff seems to be stable for a year+.
And then suddenly your build starts failing because the lockfiles only contain runtime-dependencies, not build-time-dependencies, and some library you are depending on just was silently downloading the latest version of some package you've never heard of, until it broke.
The only semi-sane workaround I know of is to use pip's `--only-binary` option to prevent any automatic builds at package installation time. Then you usually will also need your own package server for storing precompiled wheels for those third-party-dependencies that don't published compiled packages on pypi. This way you build the packages using some random tool version only once, so if it works the first time it will keep working.
In other language ecosystems were the package management isn't built on a tower of shit, this problem doesn't exist in the first place.
- duped 3y agoDoesn't poetry have a solution for this?
- nextlevelwizard 3y ago>you are depending on just was silently downloading the latest version of some package you've never heard of, until it broke. How? Are you running `pip install` every time you run your pipeline? Why do you need to constantly be reinstalling your packages?