有没有一种标准方法可以确保python2而不是python3解释python脚本?

sta*_*tti 21 python unix scripting shebang python-3.x

有没有一种标准方法可以确保python2而不是python3解释python脚本?在我的发行版中,我可以使用#!/ usr/bin/env python2作为shebang,但似乎不是所有的发行版都发布了"python2".我可以明确地调用python的特定版本(例如2.6),但这将排除那些没有该版本的人.

在我看来,当发行版开始将python3作为默认的python解释器时,这将成为一个越来越大的问题.

Eri*_*now 11

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

使用sys模块,您可以确定正在运行的python的版本,并引发异常或退出或您喜欢的任何内容.

更新:

您可以使用它来调用适当的解释器.例如,设置一个小脚本来检查你,并在shbang中使用它.它将检查运行的python版本,如果不是你想要的,找到你想要的.然后它将在该版本的python中运行脚本(或者如果没有找到任何好处则失败).


jat*_*ism 7

使用sys.version_info你可以对它进行简单的价值测试.例如,如果您只想支持2.6或更低版本:

import sys
if sys.version_info > (2,6):
    sys.exit("Sorry, only we only support up to Python 2.6!")
Run Code Online (Sandbox Code Playgroud)

  • 期待"自动选择好的翻译"是荒谬的.文件无法强制运行哪个程序. (2认同)

Ned*_*ily 7

在一个非常漫长的过渡时期,这是一个混乱的问题.不幸的是,除了让Python脚本本身在启动后检查之外,没有任何万无一失的跨平台方法可以保证调用哪个Python版本.许多(如果不是大多数)发布Python 3的发行版确保泛型python命令在默认情况下别名为最新的Python 2版本,而python3对最新的Python 3具有别名.应该鼓励那些不应该这样做的发行版.但无法保证用户不会覆盖它.我认为在可预见的未来可用的最佳实践是包装商,分销商和用户假设python参考Python 2,并在必要时在脚本中构建运行时检查.

  • 恕我直言总是应该有可用的符号链接`python2`,以便将来制作,[清晰可辨的shebangs](http://unix.stackexchange.com/questions/26573/python-python2-or-python-python3-how-to -package-分发-蟒-py2k) (2认同)