[Distutils] distutils and mxDateTime

M.-A. Lemburg mal@lemburg.com
Fri, 28 Jan 2000 11:21:10 +0100

Greg Ward wrote:
> On 25 January 2000, M.-A. Lemburg said:
> >  The setup.py file does print a help screen, but does not
> >   tell the user which commands are available. I think this
> >   should be done to help the overloaded sysadmin ;-)
> You're not the first to ask.  I'll see if I can squeeze that into
> version 0.1.3 (this weekend perhaps?).

> >  I found that using a file layout like this:
> >
> >   setup.py
> >   DateTime/
> >
> >   does not work... how do I have to fix setup.py to work
> >   in this situation (setup.py being outside the package dir) ?
> I assume you're using the mxdatetime_setup.py included in the Distutils
> distribution, in which case you have the following two options:
>        packages = ['DateTime', 'DateTime.Examples', 'DateTime.mxDateTime'],
>        package_dir = {'DateTime': ''},
> Short answer: delete 'package_dir'.
> Long answer: by putting the DateTime package in the DateTime directory,
> you are doing the "preferred thing" and thus don't have to tell
> Distutils where to find your .py source files.  The version of
> mxDateTime I based the setup script on had the DateTime package in the
> distribution root (the current directory, or ''), so I had to tell
> Distutils to look there for it -- that's what the 'package_dir' option
> is for.

Ah, ok.
> >  Tracebacks are nice for debugging, but not so nice for
> >   the end user. I'd suggest to only print tracebacks when
> >   setup.py is run in -d mode and otherwise only output
> >   a single line explaining the error condition (and via
> >   some dictionary the possible solution to the problem).
> <sarcasm>
> Hey, as long as version < 1.0, you're in debugging mode whether you like
> it or not.
> </sarcasm>
> I'm not sure that a "debugging mode" flag is the answer.  If the
> exception is due to an error in the code (Distutils code *or* a
> custom/extended command class), that's a bug and there should always be
> a traceback.  If the exception is due to user error, there should never
> be a traceback and the presence of one is a bug.  I know there are many
> exceptions that should be turned into a simple one-line "augh! user
> error, die" termination, but still show tracebacks.  Nevertheless, you
> can keep me honest by reporting these as bugs when you see them.

Well, if it's a bug, the user can run setup.py in -d mode
and then extract the traceback. It is just that user
errors producing those deeply nested tracebacks will keep
users from even thinking that they made a mistake ;-)

> >  For many of my packages the user will have to edit a
> >   Setup file and change paths and/or compile time defines.
> >   How can this be done using setup.py ?
> It can't (yet), short of forcing users the edit the setup script.  (Oh
> yeah, now I remember why I haven't been pressing you to Distutil-ize
> mxDateTime...)  I think the right thing to do is have config files; same
> idea as the old-style Setup file, but more structured.

You mean a setup.py file containing Python code plus a
config.ini file for the user adjustments. Sounds fine to
me... In that case I'd like an option on setup.py which
allows me to preedit the config.ini file via a Python
module, something like "setup.py --boot" which then 
calls a function defined in setup.py to preprocess config.ini.
This function could also do the interactive part I mentioned
below, BTW.

> >   I think I'd like
> >   this procedure to either be semi-automatic (a setdefaults.py
> >   module would scan the system and set the switches) or
> >   interactive with the user entering paths and answering
> >   to questions like:
> >
> >   Do you want to setup the subpackage mx.ODBC.Sybase ? [y/n]
> At the risk of sounding dogmatic, my initial reaction to interactive
> installation is "Absolutely out of the question!".  Serial Q&A is not a
> user interface model I wish to perpetrate or inflict on anyone.

Doesn't matter, I want it anyway ;-) Note that it doesn't
have to be tty based: a nice colorful installer could take
care of this part.

Seriously, given the above setup.py + config.ini file configuration
the interactive parts could be coded in the boot function. Would
be nice if there were an option --interactive, -i which enables
a switch to do interactive setup usable by the boot function.
> >   I guess
> >   this can only be done by creating the setup.py:setup()
> >   call parameters on-the-fly...
> Hmmm, you've been drinking from the cup of PyFort (which generates a
> setup script based on a Fortan-ish description of Fortran subroutines
> that will be glued into Python via generated C code... *shudder*).

Provided we find a good intergration of the config.ini
data with the setup() call parameters, this may not be as
bad as expected.

Marc-Andre Lemburg
Business:                                      http://www.lemburg.com/
Python Pages:                           http://www.lemburg.com/python/