easy_install should consider the development status of packages

Hi, currently, lxml has both a stable release series (1.3.x) and an unstable alpha release series (2.0alphaX) on PyPI. When you "easy_install lxml", you get the 2.0alpha version. I don't think that's what users expect and it's definitely not what most users want, but at the same time I would like to keep 2.0 visible and easy_install-able to make people aware of it and to let them decide by themselves. I would like to have easy_install changed to either consider the Trove development status of a package and prefer the highest one (or at least those from 5 up), and/or to check the version string for the typical alpha/beta substrings and ignore them by default. It would then be easy to add a command line option like "--unstable" for those who know better. Any comments on that? Stefan

On 9/15/07, Stefan Behnel <stefan_ml@behnel.de> wrote:
Hi,
currently, lxml has both a stable release series (1.3.x) and an unstable alpha release series (2.0alphaX) on PyPI. When you "easy_install lxml", you get the 2.0alpha version. I don't think that's what users expect and it's definitely not what most users want, but at the same time I would like to keep 2.0 visible and easy_install-able to make people aware of it and to let them decide by themselves.
I would like to have easy_install changed to either consider the Trove development status of a package and prefer the highest one (or at least those from 5 up), and/or to check the version string for the typical alpha/beta substrings and ignore them by default. It would then be easy to add a command line option like "--unstable" for those who know better.
Any comments on that?
A related desire of mine is to have both the latest stable release of an egg and the latest development release installed with *the latest stable release being the default* (i.e. listed, with all its stable dependencies, in easy-install.pth). Something along the lines of an -M option, which like -m, performs a multi-version install but doesn't touch easy-install.pth. I'm not sure if this is feasible (or maybe it is even already possible!), but it sounds nice to me. :) Regards, Alex

At 08:30 AM 9/15/2007 +0200, Stefan Behnel wrote:
Hi,
currently, lxml has both a stable release series (1.3.x) and an unstable alpha release series (2.0alphaX) on PyPI. When you "easy_install lxml", you get the 2.0alpha version. I don't think that's what users expect and it's definitely not what most users want, but at the same time I would like to keep 2.0 visible and easy_install-able to make people aware of it and to let them decide by themselves.
I would like to have easy_install changed to either consider the Trove development status of a package and prefer the highest one (or at least those from 5 up), and/or to check the version string for the typical alpha/beta substrings and ignore them by default. It would then be easy to add a command line option like "--unstable" for those who know better.
Any comments on that?
Patches welcome. I would prefer to see it implemented as the ability to specify a level of stability, so that for example I could specify that beta is an okay stability level. The main place where you should be looking for the patch to work is in the fetch_distribution method of the PackageIndex class in setuptools.package_index. There is only one call to this method from the easy_install command class, so the hookup should be straightforward. You'll need to scan the distribution object's "parsed_version" to determine its compliance with a particular stability level. And, to get the stability level in the first place, you'll need to use pkg_resources.parse_version and take the zeroth element for comparison purposes:
from pkg_resources import parse_version as pv pv('a') ('*a', '*final') pv('b') ('*b', '*final') pv('rc') ('*c', '*final') pv('dev') ('*@', '*final') pv('final') ('*final', '*final')
The parsed_version of a package will look something like:
pv('2.0a5') ('00000002', '*a', '00000005', '*final')
pv('1.3.2') ('00000001', '00000003', '00000002', '*final')
So, to look for stable packages, you want to look for a stability of 'final'. A package should be disqualified if it contains any non-numeric part that is < the acceptable stability. Thus, if you set a stability of "a", 2.0a6dev-r15435 should fail because:
pv('2.0a6dev-r15435') ('00000002', '*a', '00000006', '*@', '*final-', '*r', '00015435', '*final')
As you can see, it contains a '*@' to represent the 'dev' part, so it lacks alpha stability. Oh, and don't forget that this stability rejection should be a *preference*, i.e. if there is no version matching the stability setting and the version requirements, the stability requirement should be dropped.
participants (3)
-
Alexander Michael
-
Phillip J. Eby
-
Stefan Behnel