Tarek Ziadé wrote:
On Tue, Oct 7, 2008 at 2:42 PM, Phillip J. Eby <[EMAIL PROTECTED]> wrote:
At 10:07 AM 10/7/2008 -0400, Tarek Ziadé wrote:
The -m feature of setuptools is nice, but it activates one version at
a time, and
this is globlal to Python unless each application is handling the
version switch,
wich is pretty heavy.
With or without the -m switch, scripts installed by setuptools will find the
version they are specified to use, without the user needing to do anything.
 So, you can have a default version of an egg (used by the interpreter and
non-setuptools scripts), and then some non-default versions that are used by
scripts.

zc.buildout and virtualenv also have their own ways of accomplishing the
same thing, e.g., by hardcoding paths in an installed script.

in a plain python setup,

If foo 1.2 is the default, and a package wants use foo 1.4,
it needs to specifically call pkg_resources.require() in the code, to
activate it in sys.path
before importing "foo" in the code.

Since each package can list with setuptools its dependencies with
versions in install_requires,
how hard  would it be to automatically call the right "require()"
calls when the package is used ?

require() is recursive, so as long as the original script is explicitly loaded (e.g., from a binary script, or something that loads eggs/entry points) then the proper versions will be loaded. Though as far as I know, pkg_resources won't remove other versions of the egg from the path, so it only works if there are no active versions of the eggs. Which isn't how many people install packages, so this feature of require() doesn't get used for much of anything (at least that I've seen).

I'll also note that the require in setuptools-generated scripts causes pretty frequent problems for people, all to support this multi-version feature that no one really uses.

An example of an easy way to cause the problem, if you do: "python setup.py develop; svn up; python setup.py egg_info" it'll break any scripts, or if you install a script in an unusual location, or use $PYTHONPATH but don't set $PATH so that you get an unexpected script that doesn't match your libraries -- since pyinstall is using --single-version-externally-managed, I kind of wish I could easily turn off the require() as well (I could monkeypatch setuptools to remove it, but I've been burned by going down that path before).


--
Ian Bicking : [EMAIL PROTECTED] : http://blog.ianbicking.org
_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to