Python部署和/ usr / bin / env可移植性

在我所有的可执行Python脚本的开始处,我放置了shebang行:

#!/usr/bin/env python

我在env python产生Python 2.2环境的系统上运行这些脚本。 我的脚本很快失败,因为我对兼容的Python版本进行了手动检查:

if sys.version_info < (2, 4):
    raise ImportError("Cannot run with Python version < 2.4")

如果可能的话,我不想在每个可执行文件上更改shebang行; 但是,我没有对机器的管理访问权限来更改env python的结果,我不想强​​制某个特定版本,如下所示:

#!/usr/bin/env python2.4

我想避免这种情况,因为系统可能具有比Python 2.4更新的版本,或者可能有Python 2.5,但没有Python 2.4。

什么是优雅的解决方案?

[编辑:]我在提出这个问题时没有足够具体 - 我想让用户在不进行手动配置的情况下执行脚本(例如在~/bin修改路径或符号链接,并确保PATH在Python之前有~/bin 2.2路径)。 也许需要一些分配工具来防止手动调整?


“env”只是执行它在PATH env var中找到的第一件事。 要切换到不同的python,请在调用脚本之前将该python可执行文件的目录前置到路径中。


相当恶心的解决方案 - 如果你的检查失败,使用这个函数(可能会有很大的改进)来确定可用的最佳解释器,确定它是否可以接受,如果是这样的话,请使用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]

如果您正在运行脚本,则可以将PATH变量设置为首先指向一个专用bin目录:

$ mkdir ~/bin
$ ln -s `which python2.4` ~/bin/python
$ export PATH=~/bin:$PATH

然后当你执行你的python脚本时,它会使用python 2.4。 您必须更改登录脚本才能更改PATH。

或者用你想要的显式解释器运行你的python脚本:

$ /path/to/python2.4 <your script>
链接地址: http://www.djcxy.com/p/46403.html

上一篇: Python deployment and /usr/bin/env portability

下一篇: Is there a way to change effective process name in Python?