有没有标准方法确保 Python 脚本被 Python2 而非 Python3 解析?

22 投票
8 回答
1818 浏览
提问于 2025-04-16 03:24

有没有一种标准的方法来确保一个Python脚本会被Python2解释,而不是Python3?在我的系统上,我可以用 #!/usr/bin/env python2 作为开头,但似乎并不是所有的系统都自带“python2”。我可以明确调用某个特定版本的Python(比如2.6),但这样就会排除那些没有这个版本的人。

我觉得这个问题会越来越严重,因为未来的系统可能会把Python3作为默认的Python解释器。

8 个回答

8

你可以使用 sys.version_info 来简单地检查 Python 的版本。比如说,如果你只想支持 2.6 版本或者更低的版本:

import sys
if sys.version_info > (2,6):
    sys.exit("Sorry, only we only support up to Python 2.6!")
12

http://docs.python.org/library/sys.html#sys.version_info

通过使用sys模块,你可以知道当前运行的Python版本,然后可以选择抛出一个错误、退出程序,或者做其他你想做的事情。

更新:

你可以用这个方法来调用合适的解释器。比如,你可以写一个小脚本来帮你检查Python版本,并在脚本的开头使用它。这个脚本会检查当前运行的Python版本,如果不是你想要的版本,它会去寻找你需要的版本。然后,它会在那个版本的Python中运行你的脚本(如果找不到合适的版本,就会失败)。

8

这个问题有点复杂,而且在过渡期会持续很长时间。很不幸的是,目前没有一种万无一失、跨平台的方法来确保调用的是哪个Python版本,除了在脚本启动后让Python脚本自己检查。很多,甚至大多数,提供Python 3的系统默认把通用的python命令指向最新的Python 2版本,而python3命令则指向最新的Python 3版本。那些没有这样做的系统应该被鼓励去改进。不过,也不能保证用户不会自己更改这个设置。我认为在可预见的未来,最好的做法是让打包者、发行者和用户都假设python指的是Python 2,并在必要时在脚本中加入运行时检查。

撰写回答