Skip to content

Instantly share code, notes, and snippets.

@amcgregor
Created July 28, 2021 04:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amcgregor/7dbb86519f6297a6dcadc9f645528d72 to your computer and use it in GitHub Desktop.
Save amcgregor/7dbb86519f6297a6dcadc9f645528d72 to your computer and use it in GitHub Desktop.
Particularly interesting comment by ddelange on resolving Python packaging version complexity issues using pip's constraints functionality.

From: pypa/pip#9187 (comment)

could there be an easy option that forbides pip-21.2.1 to downgrade any already installed package (like specifying the existing packages version as a minimal constraint >= ) ?

@stonebig if you still have your pip cache populated, there is a way to achieve it without spamming the pypi registry: you can use the output of pip freeze and feed it to your pip command with an additional -r (it can be used multiple times):

pip freeze | sed 's/==/>=/' >> ./constraints.txt
pip install <some-new-package> -r ./constraints.txt

As all of constraints.txt is already satisfied, nothing will be re-installed unless needed. And given a populated pip cache, it also wont consume much bandwidth.

Whether it actually speeds things up (or causes panic instead), I don't know.

If you want to be even more strict (don't down NOR upgrade anything in your env), you can leave out the sed replace above and use pip's --constraint flag instead of -r. Constraints passed here will not be installed (the file can contain any set of packages also unrelated to your install), but it will force conflicts faster.

Hope that helps!

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