[Pythonmac-SIG] py-appscript problem in crontab
Christopher Barker
Chris.Barker at noaa.gov
Fri Feb 29 18:21:08 CET 2008
Leonardo Santagada wrote:
> And you also make the user know that they are not welcome to install
> python were he wants...
It all depend in who the "user" is, and who the "author" is.
> Try to at least put #!/usr/bin/env python2.5 if all you want is limit
> the python to a specific version,
That's exactly what I usually do, but it doesn't help the OP's case --
there is Apple's Python2.5, and there may be MacPython2.5 (and fink25,
and ...) each of these may have different packages installed, and thus a
given script will only work with a given one.
> but even then I think it is a really
> bad idea for any code you want to use in more than one machine as
> maybe your script will run fine in python 5.3 (made up number I know)
> and you are limiting it to a freaking old python
No you're not -- you're limiting it to run on only that python without
the user (installer, anyway), being made aware that they are trying
running it against a new version, and thus might want to test a bit.
a while back, Redhat had a bunch of admin scripts, all with:
#!/usr/bin/env python
(or maybe just #!python)
at the top. The result was that all kinds of stuff broke when someone
installed a new version of python that didn't have all of RedHat's
special modules in it (which hadn't been ported to a newer python) This
was a big 'ol pain in the *&^*& for lots of people. Had RedHat specified
a python version, there would have been no problem at all, and one would
hope that they would want to test all their code against a new version
when they decided to upgrade, and could change their #! lines then.
I think of scripts depending on Python to be much like a binary
depending on a shared library -- it's insane to link binaries against
"libc" without specifying a version, and expect them to work two
versions of libc later -- why is this any different?
Other options:
messing with global environment variables like PATH and PYTHONPATH --
now you're assuming all scripts on your system use the same python --
bad idea (see RedHat example)
Having a startup script that specifies PATH and/or PYTHONPATH -- sure,
that's fine, but is that any different that specifying it in the #! line
(unless you use one startup script for multiple python scripts, in which
case, it's a fine solution.
> Sorry for the rant, but I really get upset fixing smallbugs in
> realesed "Production" code that was hardcoded to run only on the
> author computer.
I agree -- but which bug would you rather fix -- a #! line that needs
changing, or some weird bug that's the result of a different python
version, or even more common, a script that won't run because a package
is missing (but I have that installed! what's going on!)
The very simplest python script that uses no fancy features of python
and has no dependencies might well work fine with lots of python
versions, but even that won't make the py3k transition (long before your
mythical python5.3), and I'd still like to know what versions it was
tested on (yes, I can get that from a README, but that's not really any
easier than reading a #! line, and who knows where the README may be for
an installed script)
Personally, I'd really like to see versioning somehow built into python
itself (and python packages -- eggs solve some of this), then you could
distribute a script that could declare which versions of python a script
was known to work with, and could automatically run with any of those,
and raise a useful error with any others.
OOPS! sorry -- that was a much longer rant!
-CHB
--
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker at noaa.gov
More information about the Pythonmac-SIG
mailing list