代码之家  ›  专栏  ›  技术社区  ›  static_rtti

有没有标准的方法来确保python2而不是python3解释python脚本?

  •  21
  • static_rtti  · 技术社区  · 15 年前

    有没有标准的方法来确保python2而不是python3解释python脚本?在我的发行版上,我可以使用#!/usr/bin/env python2作为shebang,但似乎不是所有发行版都提供“python2”。我可以显式地调用python的特定版本(例如2.6),但这将排除没有该版本的人。

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

    8 回复  |  直到 15 年前
        1
  •  7
  •   Ned Deily    15 年前

    这是一个有点混乱的问题,在这将是一个非常长的过渡时期。不幸的是,除了让Python脚本本身在启动后进行检查之外,没有什么简单、跨平台的方法来保证调用哪个Python版本。许多(如果不是大多数的话)发布python3的发行版都在确保 python python3 别名为最新的python3。应该鼓励那些不这样做的发行。但不能保证用户不会覆盖它。我认为在可预见的未来,最好的做法是让包装商、分销商和用户 python

        2
  •  11
  •   Eric Snow    15 年前

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

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

    更新:

    你可以用这个给合适的翻译打电话。例如,设置一个小脚本来执行检查,并在shbang中使用它。它将检查运行的python版本,如果不是您想要的,则查找您想要的版本。然后,它将在该版本的python中运行脚本(如果没有找到好的脚本,则会失败)。

        3
  •  7
  •   jathanism    15 年前

    使用 sys.version_info

    import sys
    if sys.version_info > (2,6):
        sys.exit("Sorry, only we only support up to Python 2.6!")
    
        4
  •  2
  •   kindall    15 年前

    不是完全一样的情况,但是我工作的公司有一个可以运行Python脚本的应用程序(在它的许多特性中)。在各种平台上安装Python时遇到了许多支持问题,我们决定在应用程序中安装我们自己的Python解释器。这样我们就可以确切地知道它的安装位置和版本。这种方法对于您的需求来说可能太重了(Python包只占我们应用程序的10%左右),但它确实可以工作。

        5
  •  2
  •   kenm    15 年前

    setup.py 文件来管理您的发行版,如果用户试图在python3中安装它,请将其炸掉。

    安装之后,setuptools创建的控制台脚本的shebang可能会链接到用于安装它的特定解释器。

    如果您在安装过程中做了一些奇怪的事情,您可以在使用的任何安装脚本中查找python解释器并存储一个选项。您可以首先检查所谓的“python”是否是2.x,如果不是,请检查“python2.7”、“python2.6”等以查看可用的内容。

        6
  •  0
  •   Srikar Appalaraju Tonetel    15 年前

    1. 可以使用UNIX别名创建指向不同发行版的快捷方式。例如:alias py2=“/usr/bin/python2.X”。所以当你运行你的脚本时你可以使用py2xx年
    2. 或者其他方法可以是修改PYTHON\u PATH环境变量。
    3. 或者如果我没有错的话,sys模块中有一个获取当前python版本号的规定。你可以适当地得到这笔交易。

    这应该可以。。。

        7
  •  0
  •   Community CDub    8 年前

    Here here 是一种方法。简单地使用一个简单的Bash包装器脚本可能更容易, wrapper.sh.in 看起来像:

    #!/bin/bash
    PYTHON2="@PYTHON@" #That first link enables this autotool variable
    "$PYTHON2" "$@"  #Call the desired Python 2 script with its arguments
    

    呼叫 wrapper.sh ./configure )比如:

    ./wrapper.sh my_python2_script.py --an_option an_argument
    
        8
  •  -1
  •   martineau    12 年前

    from __future__ import print_function 声明)。

    try:
        py3 = eval('print')
    except SyntaxError:
        py3 = False
    
    if py3: exit('requires Python 2')
    ...
    

    print 是一个内置函数,与Python3中的语句相反。当它不是一个函数时 eval()