[Distutils] Re: Opening up backdoors to 'setup()'

Greg Ward gward@python.net
Tue Aug 29 21:35:01 2000


[quoth Amos]
> So distutils.core.setup(script_name=file, script_args=commands) is the
> same as distutils.core.run_setup(file, commands)?

No.  Passing 'script_name' to 'setup()' is just a "fool yourself" thing;
it doesn't actually change the script being run.  It's mainly there for
completism's sake; if you can override sys.argv[1:], you ought to be
able to override sys.argv[0].

Here's a summary of what I'm thinking right now:

  setup(var=value, ...)
    - the traditional and usual way to invoke the Distutils
    - parses sys.argv (unless you override it) and carries out
      all actions implied by the command line and config files
    - currently returns nothing -- not much point, because it's all about
      side-effect, and the intended use is from a setup script, which is
      run by an installer who doesn't give a whit about the Distribution
      instance

  run_setup(file, script_args=sys.argv[1:], stop_after="run")
    - execfile's the setup script named by 'file'
    - this causes 'setup()' to be called in the normal way, so that
      a Distribution instance is created in the normal way, etc.
    - but some strings are pulled behind the scenes so that we don't
      necessarily run to completion
    - and something -- probably the Distribution instance -- is
      returned, which the caller can than query to discover the
      state of the distribution (eg. metadata, contents of config
      files, etc.)
      
> If so, is there any need for a run_setup function?

I still think so.  The differences are subtle but important.

        Greg
-- 
Greg Ward - Unix geek                                   gward@python.net
http://starship.python.net/~gward/
"He's dead, Jim.  You get his tricorder and I'll grab his wallet."