[Distutils] Byte-compilation revisited
Greg Ward
gward@python.net
Tue Oct 3 22:08:02 2000
On 03 October 2000, M.-A. Lemburg said:
> Uhm, I only wanted to prevent the install command from producing
> errors in case it cannot find the .py files to install (it should
> suffice just being able to copy the .pyc/o files).
OK -- *poof!* -- it works. Time machine. It's *always* been like that;
the "install" command just installs whatever it finds in the various
subdirectories of build/. If you delete the .py files in build, and
then install *without building* again, then you have a no-source-code
installation.
Example, from my distutils development dir:
rm -rf /usr/lib/python1.5/site-packages/distutils
python setup.py clean -a
python setup.py build_py --compile build
rm `find build/ -name '*.py'`
python setup.py install --skip-build
That works: I now have a closed source Distutils installation. If I
provoke a traceback (by setting DISTUTILS_DEBUG=1 and providing a bad
directory), I get:
Traceback (innermost last):
File "setup.py", line 55, in ?
['Src/arrayfnsmodule.c'])
File "./distutils/core.py", line 138, in setup
File "./distutils/dist.py", line 829, in run_commands
File "./distutils/dist.py", line 849, in run_command
File "./distutils/command/build.py", line 106, in run
File "/usr/lib/python1.5/cmd.py", line 328, in run_command
File "./distutils/dist.py", line 849, in run_command
File "./distutils/command/build_py.py", line 104, in run
File "./distutils/command/build_py.py", line 371, in build_packages
File "./distutils/command/build_py.py", line 333, in build_module
File "/usr/lib/python1.5/cmd.py", line 358, in mkpath
File "./distutils/dir_util.py", line 80, in mkpath
distutils.errors.DistutilsFileError: could not create '/foo': Permission denied
The filenames in the .pyc files are less than helpful (they're relative
to build/lib in my development tree), but who cares? there're no source
files installed here anyways!
Is it obvious? Not really. Does it work? You bet! Could you sit down
right now and churn out a closed-source RPM? I don't think so --
bdist_rpm doesn't let you supply arbitrary options to the "install" or
"build" commands, and I don't think it should. You'd have to extend
bdist_rpm to do this.
Is this the right way to do closed source distributions? Well, to do it
cleanly would require a "--remove-source" option to "build_py", and then
support from bdist_{rpm,wininst,...}. Not impossible by any stretch.
Who else out there wants this functionality? Should the ability to
distribute closed-source module distributions be standard? Or should
people who want it be required to extend bdist_{rpm,wininst,...} if they
need it?
trying-so-hard-not-to-say-"greedy closed source bastards!"-because-
you-know-I-don't-really-mean-it,
Greg
--
Greg Ward gward@python.net
http://starship.python.net/~gward/