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
_______________________________________________
Distutils-SIG maillist - Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig