Python deployment and /usr/bin/env portability
At the beginning of all my executable Python scripts I put the shebang line:
#!/usr/bin/env python
I'm running these scripts on a system where env python
yields a Python 2.2 environment. My scripts quickly fail because I have a manual check for a compatible Python version:
if sys.version_info < (2, 4):
raise ImportError("Cannot run with Python version < 2.4")
I don't want to have to change the shebang line on every executable file, if it's possible; however, I don't have administrative access to the machine to change the result of env python
and I don't want to force a particular version, as in:
#!/usr/bin/env python2.4
I'd like to avoid this because system may have a newer version than Python 2.4, or may have Python 2.5 but no Python 2.4.
What's the elegant solution?
[Edit:] I wasn't specific enough in posing the question -- I'd like to let users execute the scripts without manual configuration (eg path alteration or symlinking in ~/bin
and ensuring your PATH has ~/bin
before the Python 2.2 path). Maybe some distribution utility is required to prevent the manual tweaks?
"env" simply executes the first thing it finds in the PATH env var. To switch to different python, prepend the directory for that python's executable to the path before invoking your script.
相当恶心的解决方案 - 如果你的检查失败,使用这个函数(可能会有很大的改进)来确定可用的最佳解释器,确定它是否可以接受,如果是这样的话,请使用os.system或类似的东西和你的sys重新启动你的脚本。 argv使用新的解释器。
import os
import glob
def best_python():
plist = []
for i in os.getenv("PATH").split(":"):
for j in glob.glob(os.path.join(i, "python2.[0-9]")):
plist.append(os.path.join(i, j))
plist.sort()
plist.reverse()
if len(plist) == 0: return None
return plist[0]
If you are running the scripts then you can set your PATH variable to point to a private bin directory first:
$ mkdir ~/bin
$ ln -s `which python2.4` ~/bin/python
$ export PATH=~/bin:$PATH
Then when you execute your python script it'll use python 2.4. You'll have to change your login scripts to change your PATH.
Alternatively run your python script with the explicit interpreter you want:
$ /path/to/python2.4 <your script>
链接地址: http://www.djcxy.com/p/46404.html