Quoth Andrew Dalke, on 28 March 1999:
When should the .pyc and .pyo files be generated during the install process, in the "build" directory or the "install" one?
Sounds like everyone is in favour of compiling at build time: good. Nobody mentioned my reason for favouring this, which is simple: installation should consist of nothing more than copying files and (possibly) changing modes and ownerships. All files that will be installed should be generated at build time. This makes lots of things easier, notably: installation itself; updating the mythical database of installed files; and creating "built distributions" such as RPM.
Also, if you check the code, you'll note that I don't use the 'compileall' module, but rather explicitly follow the list of module to build. Being able to catch errors didn't occur to me, but it's one good reason. (And Andrew's patch probably won't make it into versions 1.4 through 1.5.1, which I would still like to support.) I think I just did it that way because I don't like ceding control over which files are processed to an external entity. (You'll note that distutils supplies it's own 'copy_tree()' function, for basically the same reason.)
Would anyone interested in error handling care to look into what happens when 'compile' fails? Doesn't look like I've done anything in particular to handle it (see distutils/command/build_py.py, towards the bottom of the 'run()' method) -- I probably blithely assumed that it would raise an exception like most IO routines do.
Wow, a thread where everybody agrees... we must be on to to something.