[Distutils] Further extending of setup.py

Phillip J. Eby pje at telecommunity.com
Wed Apr 19 22:52:13 CEST 2006


At 03:14 PM 4/19/2006 -0500, Ian Bicking wrote:
>It looks like, if I do this, it will also have to implement the current 
>default behavior of finding distutils.commands providers.

No it won't.  You should just look up things that you want to provide; 
setuptools and distutils will do their own thing if your __contains__ says 
False or your get() returns the default when they ask for a command 
class.  They will then call your __setitem__ to cache whatever they find.


>>If you come up with a nice "command map" object that lets you do 
>>something like:
>>      setup(
>>          cmdclass = CommandMap(
>>              # configuration stuff here
>>          ),
>>          ...
>>      )
>>then it would make a nice addition to setuptools for people that need it.
>
>OK, I'll look into that.  I'm guessing it'll be something like 
>CommandMap([eggs]), and maybe some other options, though I can't think of 
>any at the moment.  Maybe also reading .egg-info/command_map.txt if not 
>given any list of eggs -- I'd like to keep options for putting metadata 
>into .egg-info/*.txt files instead of setup.py.

Yecch.  When I first started doing egg stuff for setuptools, I thought it'd 
be nice to just edit files in .egg-info, and then I quickly got sick of 
it.  IMO, setup.py should be a one-stop-shop.  It's easier to explain to 
setup authors, too.  I can understand not wanting to go to the trouble of 
implementing an egg_info "writer" plugin, but trying to show people how to 
actually use these things, I think your users are a lot better off if all 
they have to do is  pass in a setup keyword or two.


>I think the features for a simple two-level command framework would be 
>fairly simple:
>
>* Register commands somehow (entry points, I suppose).  Commands have a 
>name and aliases.
>* Commands can be called to run them, with all arguments after the command 
>name.
>* Commands have a help() method or something like that, that returns a 
>string help message.  Probably two forms -- a long-form help, and 
>short-form.  Maybe only the short form?
>* The framework provides "cmd -h", "cmd help", "cmd -h subcommand", and 
>"cmd help subcommand".  The last two might just call "cmd subcommand -h" 
>internally.
>* I suppose the framework needs to be given some global help message.
>* It should be possible to hide commands or aliases from help.  E.g., 
>commands that represent an internal interface, or aliases that are only 
>provided for backward compatibility.
>* Maybe a standard way to activate specific eggs, e.g., "cmd 
>--require='Foo==1.0' ...".  Maybe also a way of controlling the 
>PYTHONPATH, since setting environmental variables is not equally easy in 
>all environments.
>
>Everything else should be possible to build from there with other 
>sub-frameworks.

You left out configuration.


>Self-referencing entry point loading would be nice.  Then, for instance, 
>you could do:
>
>   entry_points="""
>   [whatever.this.group.is]
>   sql-setup = sqlobject.commands:setup_command
>   """
>
>If setup_command is called with the package's Distribution object, then it 
>can read config files or whatever from the egg, and you don't have to 
>create little bits of glue all over the place.
>
>Hmm... putting information into the entry point name is problematic here, 
>because SQLObject would give a set of commands which would be a bit 
>tedious to enumerate, and it would be better if you could introduce the 
>whole set of commands with one entry point.  Also, it doesn't resolve the 
>problem of aliases.  Though it does give you an opportunity to resolve 
>naming conflicts by renaming a command.

Sorry, I don't really understand what you're trying to do here.  Are you 
talking about adding something to "nest", or...?


>Would setuptools stop using the distutils command framework?

No - it's necessary for compatibility, and to handle the intricate 
interdependencies where some commands depend on values computed by other 
commands.  Nest has much simpler needs that would be better served by less 
implicit coupling.



More information about the Distutils-SIG mailing list