[Distutils] API for finding plugins

Ian Bicking ianb at colorstudy.com
Wed Feb 8 00:21:17 CET 2006

Ian Bicking wrote:
> Hmm... and reading over this, I realize that a "plugin directory" is not 
> that different from the virtual python setups, and I think that kind of 
> setup is really the only good way to deploy web applications.  "Working 
> set" -- which is already an idea in setuptools -- is probably the 
> concept that encompasses both uses.  As a developer, I'd like it to be 
> easier and safer to change my working set -- right now I have hacks in 
> sitecustomize and distutils to make that easy.  This switching of 
> working sets is basically what Jim wants in a Zope Instance as well.

One of the open questions I have here, is how the working set is 
determined.  Here's some current practices:

* Scripts include all the information about their working set.  Jim 
brought this up recently, where in addition to the version a script will 
also contain the PYTHONPATH in some form.  In this, you explicitly run 
some particular script, implicitly activating a working set.

* The virtual Python installations basically work like this too. 
"Administrator Install" basically keys it of $HOME, which is great for 
per-user installations but doesn't get any more fine grained.  "Virtual" 
Python uses the Python executable itself, and then all scripts will give 
an absolute path to the executable they use, so this same script-based 
dispatch continues to work with other commands.  "Traditional" 
PYTHONPATH seems a little annoying, but maybe is kind of the right 

* At work we're using an environmental variable ("ACTIVE_SITE") which 
changes sys.path (in sitecustomize) and the distutils installation 
options.  This is like basing it on $HOME, but a bit more flexible 
(since $HOME has a lot of meanings).  Another option would be some other 
environmental variable with a $HOME fallback.  But this requires some 
distutils monkeypatching to make work.

Are there other ways we can identify the user's intended working set?  I 
don't think environmental variables are easy to work with on Windows, 
and it's a little opaque from a GUI user's perspective.  $HOME isn't 
granular enough.  Multiple scripts can work, but I've found it 
challenging to manage when the binaries in $PATH work, but potentially 
with bad side-effects (the discipline of keeping working sets separated 
isn't enforced, or even suggested by making it easier to do the right 
thing).  Multiple scripts seems the most workable and transparent from 
the point of view of a GUI user, and not particularly bad from the 
perspective of a Posix command-line user either.

[The more I think about it, the more I think site-packages in its 
entirety is pointless, distracting, and dangerous.  But I don't think a 
PEP proposing its removal would be well received at this time ;) ]

Ian Bicking  /  ianb at colorstudy.com  /  http://blog.ianbicking.org

More information about the Distutils-SIG mailing list