Python 3.0 will be backward incompatible
John Gilmore
gnu at toad.com
Mon Feb 4 17:26:00 EST 2008
> #!/usr/bin/python2.5 works for me.
Works on the OLPC and on some Linuxes. Not everybody puts Python
in /usr/bin, unfortunately. That's a local system dependency, rather
than a global constant -- but there it is in your portable Python
program. :-(
I've seen others do "#!env python2.5" which at least has the benefit
of not hardwiring the execution path. It also requires a second small
executable, which is widely available in Unix/Linux systems as part of
the GNU Coreutils (and busybox). But are you sure that python2.5 is the
name of Python 2.5 everywhere? Not "python-2.5", not "python.2.5",
not "python_2.5", not "Python 2.5"?
I think it would be better to have a system library that would
re-execute a different interpreter (in a system-dependent way) if
the one that started this Python program wasn't an acceptable version.
Thus you could use #!python, then something like:
import pyversion from pyversion
version.enforce(2.5)
This could be implemented in an arbitrarily complex way, such as:
* return immediately if the right version is running.
* Complain bitterly if this is a second call and demands a different version
than the first call (e.g. main program wants 2.4, library wants 2.5).
* Complain bitterly if the main program has done something irrevocable
before this call, and thus exec() won't do the right thing.
* exec() the right version if it's installed elsewhere in the system.
* Unpack the right version from a tar file into a cache directory, exec it.
* Try "apt-get install python-$version" and then exec it.
* Try doing a home-directory apt-get if you don't have system install
permission (a la "xo-get").
* Check the mesh to see if any nearby laptop has it.
* ...etc...
John
More information about the Devel
mailing list