[Distutils] Simple idea to resolve versioning problems
David Cournapeau
david at ar.media.kyoto-u.ac.jp
Thu Apr 24 04:46:31 CEST 2008
Jeff Younker wrote:
>
> That's good and fine for the situation where one application is
> being deployed on a Python installation, but that isn't a very realistic
> situation. There is usually more than one application/script/whatever
> running off of a given Python installation.
>
> Here's an example of how you can get into an unworkable situation:
>
> Application A depends on:
> library B v 1.1
> library C v 2.3
>
> Library B v 1.1 has no dependencies.
>
> Now application D comes along. It depends upon:
> library B v 1.4
>
> But library B v 1.4 depends upon library C v 2.6.
>
> Application A *breaks* with library C v 2.6.
>
> Which does the user give up? Application A (their
> storage management client) or application D (their
> monitoring agent)?
>
> This sort of stuff happens all the time.
>
> This is what a Versioning (with a capital V attempts
> to solve.)
No, versioning does not solve this at all, this has nothing to do with
versioning. Dependency management does, and the two issues are mostly
orthogonal.
Installing multiple versions of the same package with versioning as an
attempt to solve dependencies is broken. It has been used before,
without any success.
> Thats a great theory, but that's not how the real world works. Python
> packages are an ecology where there will be inconsistencies between
> different minor versions of the same package. A legitimate bug fix
> may break behavior that other packages depend upon while correcting
> the behavior for others. That's just the way stuff happens.
>
> We can encourage 10,000 disparate developers to adhere to best practices,
> but it's fantasy to imagine that they will. Most of the people
> putting together
> packages are donating their 80% solutions to the rest of the world.
But most packages won't depend one on each other; most of the 80 %
packages you are talking about are not meant to be used by other.
Thinking versioning + side by side installation will solve the problem
of breaking API is totally wrong. It just does not work.
Please take a look at this page I mentioned before:
http://www.mono-project.com/Assemblies_and_the_GAC
It explains the problem very well, much better that I will ever be able
to. Look at the paragraph "What should be installer in the GAC", the GAC
being the system used in the .net ecosystem to maintain multiple version
side by side and provide a system to serve the right library (assembly
in .net terms) at the right application.
Again, having a few packages with several versions is Ok. But enabling
this as the general rule is path to hell from a maintenance/support
point of view.
cheers,
David
More information about the Distutils-SIG
mailing list