voxpupuli / puppet-python

Puppet module for installing and managing Python, pip, virtualenvs and Gunicorn virtual hosts.
https://forge.puppetlabs.com/puppet/python
Apache License 2.0
199 stars 370 forks source link

Puppet pre-releases causing corrective changes #549

Open negast opened 4 years ago

negast commented 4 years ago

Pip pre releases are set as the latest available package by puppet. This is done by following command

pip --log /tmp/pip.log install pip==notreallyaversion 2>&1 | grep -oP "\(from versions: .*\)" | sed -E "s/\(from versions: (.*?, )*(.*)\)/\2/g" | tr -d "[:space:]") = $(pip freeze --all | grep -i -e ^pip== | cut -d= -f3 | tr -d '[:space:]'

As of time of writing i got 20.2b1 however when you try to upgrade you dont get the pre release but latest stable version as that is not tagged latest version https://pypi.org/project/pip/#history

Thus puppet tries to correct this each time and you get a coorective change.

I think the check command should be changed so the pre releases are excluded from the latest version check. Or have the option to install pre-releases and keep the old check.

I checked and following command gave me the latest release:

pip --log /tmp/pip.log install pip==notreallyaversion 2>&1 | grep -oP "\(from versions: .*\)" | tr " " "\n" | grep -v b | sed 's/,//g' | tail -n 1

creativefre commented 4 years ago

Any updates on this?

gdubicki commented 2 years ago

We are also affected by this and I would like to fix it.

But it's at least slightly more complicated than you suggest, @negast. Pre-releases have more possible segments than "bN", see https://peps.python.org/pep-0440/#pre-releases .

gdubicki commented 2 years ago

I think that this works, although it could use some optimisation (probably one sed in place of tr and those 2 seds will do): pip install pip==notreallyaversion 2>&1 | grep -oP "(from versions: .*)" | tr " " "\n" | sed 's/,//g' | sed 's/)//g' | grep -vP '\d(a|b|rc)\d+((\.post|dev)\d+)?$' | tail -n 1

gdubicki commented 2 years ago

Note to self: we need to remember that the behavior of this should change if we add —pre to the params passed to pip.