在shebang中引用python26还是python2.6

2 投票
3 回答
4461 浏览
提问于 2025-04-16 09:56

我需要一个特定版本的Python来运行我的脚本。目前我安装的Python 2.6里有两个命令,一个是python26,另一个是python2.6。

我应该在开头的那一行(shebang)写哪个呢?

选项1:

#!/usr/bin/env python2.6

选项2:

#!/usr/bin/env python26

补充说明:是的,我不想用普通的python是有原因的。在我们大学的一些环境中,python链接的是python2.4,而我的代码用到了很多2.6的特性。

3 个回答

-1

你为什么不直接用 /usr/bin/python 呢?有没有什么特别的原因不这样做?

如果你还没有这个链接,可以用下面的命令来创建一个:

ln -s /usr/bin/python26 /usr/bin/python

这样做可以确保将来如果你升级了Python,依然能保持兼容性。

8

你不能总是保证会使用到shebang(脚本开头的那行代码),或者用户可能根本没有安装你指定的版本。

其实不应该限制到某个特定版本。最好是要求至少有某个版本(比如你的代码在Python 2.6上能跑,那为什么在Python 2.7上就不能跑呢?我可能过几个月就不再安装Python 2.6了)。

我建议使用 /usr/bin/env python 作为shebang,然后动态检测版本。相信我,通常的做法是这样的:

import sys
ver = sys.version[:3]

这样你会得到一个三位数的字符串,比如 "2.6" 或 "2.7"。我会检查第一个字符是否是 '2'(假设你想防止Python 3运行你的脚本,因为它们大部分不兼容),并且第三个字符要大于等于 '6'。

编辑:参考Petr的评论 -- 用 sys.version_info[0:2] 来替代(这样会给你一对像 (2, 6)(2, 7) 的值)。

3

我刚在我的Linux系统上查看了一下,发现只有python2.6,没有python26,所以前者看起来更好。

为了更清楚一点,我会使用条件导入。在我的情况下,我需要OrderedDict,这个只有在python 2.7及以上版本才有。

try:
    from collections import OrderedDict
except ImportError:
    print("Python 2.7+ is needed for this script.")
    sys.exit(1)

撰写回答