[python] 새로운 언어 기능을 사용하는 프로그램에서 Python 버전을 확인하려면 어떻게해야합니까?

적어도 특정 버전의 Python이 필요한 Python 스크립트가있는 경우 이전 버전의 Python을 사용하여 스크립트를 시작할 때 정상적으로 실패하는 올바른 방법은 무엇입니까?

오류 메시지를 발행하고 종료 할 수있을 정도로 일찍 제어하려면 어떻게해야합니까?

예를 들어, ternery 연산자 (2.5의 새로운 기능)와 “with”블록 (2.6의 새로운 기능)을 사용하는 프로그램이 있습니다. 스크립트가 가장 먼저 호출하는 간단한 인터프리터 버전 검사기 루틴을 작성했습니다. 대신, 내 루틴이 호출되기 전에 파이썬 컴파일 중에 스크립트가 실패합니다. 따라서 스크립트 사용자는 매우 모호한시 낙스 오류 역 추적을 볼 수 있습니다. 이는 잘못된 버전의 Python을 실행하는 경우에 불과하다는 사실을 전문가가 추측해야합니다.

파이썬 버전을 확인하는 방법을 알고 있습니다. 문제는 이전 버전의 Python에서 일부 구문이 잘못되었다는 것입니다. 이 프로그램을 고려하십시오 :

import sys
if sys.version_info < (2, 4):
    raise "must use python 2.5 or greater"
else:
    # syntax error in 2.4, ok in 2.5
    x = 1 if True else 2
    print x

2.4 미만으로 실행하면이 결과를 원합니다.

$ ~/bin/python2.4 tern.py
must use python 2.5 or greater

이 결과가 아닙니다.

$ ~/bin/python2.4 tern.py
  File "tern.py", line 5
    x = 1 if True else 2
           ^
SyntaxError: invalid syntax

(동료를위한 채널링)



답변

다음을 사용하여 테스트 할 수 있습니다 eval.

try:
  eval("1 if True else 2")
except SyntaxError:
  # doesn't have ternary

또한, with 파이썬 2.5에서, 단지 추가 가능합니다 from __future__ import with_statement.

편집 : 충분히 일찍 제어 .py하려면 가져 오기 전에 (예 __init__.py: 패키지에서) 다른 파일 로 분할 하고 기본 파일의 호환성을 확인할 수 있습니다 .

# __init__.py

# Check compatibility
try:
  eval("1 if True else 2")
except SyntaxError:
  raise ImportError("requires ternary support")

# import from another module
from impl import *


답변

다음을 수행하는 프로그램 주위에 랩퍼를 두십시오.

import sys

req_version = (2,5)
cur_version = sys.version_info

if cur_version >= req_version:
   import myApp
   myApp.run()
else:
   print "Your Python interpreter is too old. Please consider upgrading."

또한 사용을 고려할 수 sys.version()는 2.0 이전 파이썬 인터프리터를 사용하는 만남의 사람들에게하려는 경우,하지만 당신은 할 수있는 몇 가지 정규식이 있습니다.

그리고 이것을하는 더 우아한 방법이있을 수 있습니다.


답변

시험

수입 플랫폼
platform.python_version ()

“2.3.1”과 같은 문자열을 제공해야합니다. 이것이 정확히 맞지 않으면 “플랫폼”내장을 통해 사용 가능한 풍부한 데이터 세트가 있습니다. 당신이 원하는 것은 어딘가에 있어야합니다.


답변

이 버전 비교를 수행하는 가장 좋은 방법은을 사용하는 것 sys.hexversion입니다. 버전 튜플을 비교하면 모든 파이썬 버전에서 원하는 결과를 얻지 못하기 때문에 중요합니다.

import sys
if sys.hexversion < 0x02060000:
    print "yep!"
else:
    print "oops!"


답변

import sys
# prints whether python is version 3 or not
python_version = sys.version_info.major
if python_version == 3:
    print("is python 3")
else:
    print("not python 3")


답변

AskUbuntu의 Nykakin 답변 :

platform표준 라이브러리의 모듈을 사용하여 코드 자체에서 Python 버전을 확인할 수도 있습니다.

두 가지 기능이 있습니다.

  • platform.python_version() (문자열을 반환).
  • platform.python_version_tuple() (튜플을 반환).

파이썬 코드

예를 들어 파일을 작성하십시오. version.py)

버전을 확인하는 쉬운 방법 :

import platform

print(platform.python_version())
print(platform.python_version_tuple())

다음 eval방법을 사용할 수도 있습니다 .

try:
  eval("1 if True else 2")
except SyntaxError:
  raise ImportError("requires ternary support")

명령 행에서 Python 파일을 실행하십시오.

$ python version.py
2.7.11
('2', '7', '11')

Windows 10에서 WAMP Server를 통해 CGI를 사용한 Python 출력 :

Suriyaa Kudo의 스크린 샷 2016-11-16 14.39.01


유용한 자료


답변

이전 버전과의 호환성을 유지하기 위해 Python 2.4에서 집합은 핵심 언어의 일부가되었습니다. 나는 그때 그 일을했는데, 그것은 당신에게도 효과가 있습니다.

if sys.version_info < (2, 4):
    from sets import Set as set