ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> catalog-sig
catalog-sig
Re: [Catalog-sig] [Distutils] pre-PEP : Synthesis of previous threads, and irc talks + proposals
by Ian Bicking other posts by this author
Oct 7 2008 12:08PM messages near this date
Re: [Catalog-sig] [Distutils] pre-PEP : Synthesis of previous threads, and irc talks + proposals | Re: [Catalog-sig] [Distutils] pre-PEP : Synthesis of previous threads, and irc talks + proposals
Tarek Ziadé wrote:
>  On Tue, Oct 7, 2008 at 2:42 PM, Phillip J. Eby <pje@[...].com> 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 : ianb@[...].com : http://blog.ianbicking.org
_______________________________________________
Catalog-SIG mailing list
Catalog-SIG@[...].org
http://mail.python.org/mailman/listinfo/catalog-sig
Thread:
Phillip J. Eby
Chris Withers
Phillip J. Eby
Phillip J. Eby
Ziade Tarek
Zooko
Toshio Kuratomi
Phillip J. Eby
Phillip J. Eby
Ziade Tarek
Ian Bicking
Gael Varoquaux
Ziade Tarek

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved