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

上一篇: “#!/ usr / bin / env python”无法将参数传递给python

下一篇: Python部署和/ usr / bin / env可移植性