스크립트를 실행중인 Python 버전을 확인하려면 어떻게합니까?


1183

스크립트를 해석하는 Python 인터프리터의 버전을 어떻게 확인할 수 있습니까?


1
현재 스레드는 파이썬 프로그램 / 스크립트에서 파이썬 버전을 확인하는 것입니다. 커맨드 라인에서 컴퓨터에 설치된 python 인터프리터 버전을 확인하려면 다음 게시물을 참조하십시오- 어떤 버전의 Python을 설치 했습니까?
RBT

1
다음은 파이썬 3과 2를 분리하는 재미있는 방법입니다.python_version = int(str(range(3))[-2])
Chris_Rands

@RBT : 명령 줄에서 한 줄 확인하려면 내 답변을 참조하십시오 .
smci

답변:


1377

이 정보는 sys 모듈 의 sys.version 문자열에서 사용할 수 있습니다 .

>>> import sys

인간이 읽을 수있는 내용 :

>>> print(sys.version)  # parentheses necessary in python 3.       
2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]

추가 처리 :

>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192

Python 인터프리터의 최소 버전 요구 사항으로 스크립트를 실행하려면 코드에 다음을 추가하십시오.

assert sys.version_info >= (2, 5)

주요 및 부 버전 정보를 비교합니다. (= 마이크로 추가 0, 1등), 심지어 releaselevel (= 'alpha', 'final'당신 등과 같은 튜플, 등). 그러나 특정 기능이 있는지 확인하고 그렇지 않은 경우 해결 방법 (또는 구제)을 확인하는 것이 "항상 덕"하는 것이 좋습니다. 때로는 기능이 최신 릴리스에서 사라져 다른 버전으로 대체 될 수 있습니다.


39
실제로는 인쇄 구문입니다. 버전을 확인하지 않습니다. 내가 사용하는 내 파이썬 2와 3 스크립트가 :PY3 = sys.version_info[0] == 3
GCB

5
PY2 = sys.version_info [0] == 2 PY3 = sys.version_info [0] == 3
xiaoweiz

25
sys.version_info속성으로 일부 필드에 액세스 할 수도 있으므로 PY3 = sys.version_info.major == 3조금 더 매력적일 수 있습니다.
krs013

1
참고 : sys.hexversion이 0x020502F0과 비교, 참조 docs.python.org/2/library/sys.html#sys.hexversion
Yinon 에를리히

1
@gcb Python 4가 발생할 때마다 코드 스 니펫이 중단됩니다. 당신은해야 if sys.version_info >= (3,)합니다. 서로 다른 크기의 튜플을 비교하는 것은 완전히 pythonic이며 올바른 작업을 수행합니다.
Boris

374

명령 행에서 (대문자 'V'를 참고하십시오) :

python -V

이것은 'man python'에 문서화되어 있습니다.


13
대문자 V는 소문자가 아닌 버전입니다.
Rogue

96

나는 sys.hexversion이런 것들을 좋아한다.

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

>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True

그것은 내가 보지 못했던 멋진 버전 기능이며, 일반 버전보다 사용하기가 조금 더 쉽다 ...
Wayne Werner

6
@ sorin : 이것이 Seth의 대답보다 어떻게 더 나은지 설명 할 수 있습니까? 이것이 최고라고 말했기 때문에 궁금합니다.
0xC0000022L

3
@ 0xC0000022L 튜플의 텍스트를 어떻게 비교할 수 있을지 궁금한 적이 있습니까? '최종'은 베타, rc 또는 가능한 모든 것과 어떻게 비교됩니까? 대신 숫자 값이 있으면 항상 정확한 버전을 지정할 수 있습니다.
sorin

1
@sorin : 음, 정확히 중요하지 않습니까? 내가 비교할 경우 (2,6,4)'final'비교에 영향을하지 않는 것 그리고 그것은 아닌가요. 튜플의 "가장 중요한"부분을 비교할 때 슬라이싱이 필요하지 않습니다. 이것은 치료 방법이며 내 질문에 관한 것입니다. 나는이 솔루션에 장점이 없다고 말하는 것이 아니라 왜 그것이 가장 좋은지, 즉 내가 잃어버린 것이 무엇인지 궁금합니다.
0xC0000022L

11
릴리스 레벨은 '알파', '베타', '후보자'또는 '최종'중 하나로 정의되며,이 또한 올바르게 비교됩니다.
Fredrik

65

가장 좋은 방법은 아마도 다음과 같습니다.

>>> import sys
>>> sys.version_info
(2, 6, 4, 'final', 0)
>>> if not sys.version_info[:2] == (2, 6):
...    print "Error, I need python 2.6"
... else:
...    from my_module import twoPointSixCode
>>> 

또한 항상 간단한 시도로 가져 오기를 래핑 할 수 있으며 구문 오류가 발생합니다. 그리고 @Heikki의 지적에 따르면이 코드는 이전 버전의 Python과 호환됩니다.

>>> try:
...     from my_module import twoPointSixCode
... except Exception: 
...     print "can't import, probably because your python is too old!"
>>>

3
왜 ImportError가 아닌 일반 예외입니까? : P
치명적인

4
@deadly-ImportError는 SyntaxErrors를 포착하지 않습니다.이 구문은 2.5 이전의 조건부 단축키 를 사용하는 것과 같이 오래된 파이썬에서 새로운 구문을 사용하려고 시도하면 발생합니다 .
Seth

except Exception너무 넓습니다. 예상되는 특정 예외를 사용하는 것이 더 좋지 않습니까?
Fermi paradox

1
@ Fermiparadox-광범위하게 가정을 낮게 유지합니다. except Exception:자체 라인은 이미 현대 (2.X +) 파이썬을 가정합니다. 어쩌면 미래의 일부 파이썬은 이전 버전과 호환되지 않는 방식으로 예외 이름을 재 배열합니까? (아마도 그렇지는 않지만, 누가 우리 모두가 오큘 러스 리프트 안구 임플란트를 가지고있을 때 20 년 안에 파이썬이 어떻게 보일지 알고 있습니까? 코드는 오래 지속됩니다.)
Seth

65

사용 platformpython_version 다음 stdlib에서 :

>>> from platform import python_version
>>> print(python_version())
2.7.8

5
인쇄 기능의 경우 괄호가 더 좋으며 호환성에 대해 생각했습니다. 누군가 버전 3에서 샘플을 사용하면 구문 오류가 기다리고 있습니다.
Alex Chiang

47

다음과 같은 것을 넣으십시오.

#!/usr/bin/env/python
import sys
if sys.version_info<(2,6,0):
  sys.stderr.write("You need python 2.6 or later to run this script\n")
  exit(1)

스크립트 상단에

스크립트에있는 내용에 따라 대상보다 이전 버전의 python은 스크립트를로드하지 못할 수도 있으므로이 오류를보고하기에 충분하지 않습니다. 이 문제를 해결하려면 최신 코드로 스크립트를 가져 오는 스크립트에서 위의 코드를 실행할 수 있습니다.


6
예전 통역사가와 같은 새로운 언어 구조를 사용하지 않기 때문에 이것은 부정확하거나 적어도 불완전 x if Pred() else y합니다. "lexing"단계에서 죽을 것이고 실제로 실행할 기회는 없습니다 exit(1). Seth의 답변 은 다른 파일에 새로운 언어 기능을 캡슐화하는 데 정확합니다.
Mark Rushakoff

2
@MarkRushakoff : 귀하의 의견이 혼란 스럽습니다. 이 답변의 어느 부분이 잘못 되었습니까? 누락 된 else분기 또는 해당에 <사용 version_info됩니까? AFAIK Python은 튜플에서 누락 된 값을 채 웁니다.이 모든 것이 2.6 이전에 유효해야합니다. 따라서 Seth의 답변은 슬라이싱 (중복)을 사용하지만 그렇지 않은 것은 귀하의 의견을 더욱 혼란스럽게 만듭니다.
0xC0000022L

5
@MarkRushakoff가 말하는 것은 파일 상단 에이 언어가 있고 동일한 파일의 다른 곳에 새로운 언어 기능이 있으면 파일을로드 할 때 이전 버전의 python이 파일을 실행하기 전에 죽을 것이라고 생각합니다. 오류가 표시되지 않습니다. 기본적으로 위의 (또는 다른 검사)를 파일 맨 위에 놓은 다음 별도의 파일에서 새 버전의 파이썬이 필요한 코드를 가져옵니다.
rjmunro 2016 년

1
그래, 무슨 @rjmunro는 :) 말했다
마크 Rushakoff

25

다음은 바로 종료되는 짧은 명령 줄 버전입니다 (스크립트 및 자동 실행에 적합).

python -c "print(__import__('sys').version)"

또는 메이저, 마이너 및 마이크로 :

python -c "print(__import__('sys').version_info[:1])" # (2,)
python -c "print(__import__('sys').version_info[:2])" # (2, 7)
python -c "print(__import__('sys').version_info[:3])" # (2, 7, 6)

1
@ vigilancer 당신이 맞습니다, 글을 쓰는 시점에서 아직 관련성이 없었지만 지금은 Python 3 용으로 업데이트했습니다 :)
Wolph

니스, 이것은 내가의 출력을 캡처하여 버전 번호를 얻고 있었다 내 문제 해결 python2 --versionpython3 --versionPHP에서입니다. 를 통해 문제없이 후자를 얻을 수 있지만 passthru()전자는 화면으로 인쇄하지만 파일로 리디렉션 될 때도 캡처되지 않습니다 ...
Tox

1
@tox print() 파일이 더 편리하다면 파일에 쓰라고 말할 수 있습니다 .
Wolph

내 경우에는 이미 passthru()출력을 파일로 리디렉션하는 것과 동일 합니다. 귀하의 솔루션은 내가 필요한 것을 정확하게 수행합니다. :)
Tox

14

six모듈을 사용하면 다음과 같이 할 수 있습니다.

import six

if six.PY2:
  # this is python2.x
else:
  # six.PY3
  # this is python3.x

8
import sys
sys.version.split(' ')[0]

sys.version은 원하는 것을 제공합니다. 첫 번째 숫자를 선택하십시오. :)


5

가장 간단한 방법

터미널에 python을 입력하면 다음과 같이 버전을 볼 수 있습니다

desktop:~$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

23
"가장 간단한 방법" ... 요청한 것과 다른 것을하는 것.
Luc

4

Seth가 말했듯이 기본 스크립트는 확인할 수 sys.version_info있지만 2.0 이전에는 나타나지 않았으므로 이전 버전을 지원하려면 sys 모듈의 다른 버전 속성을 확인해야합니다.

그러나 이전 Python 버전에서는 사용할 수없는 파일에서 Python 언어 기능을 사용하지 않도록주의해야합니다. 예를 들어, 이것은 Python 2.5 이상에서 허용됩니다.

try:
    pass
except:
    pass
finally:
    pass

그러나 이전 Python 버전에서는 작동하지 않습니다. OR을 제외하고는 시도와 만 일치 할 수 있기 때문입니다. 따라서 이전 Python 버전과의 호환성을 위해서는 다음을 작성해야합니다.

try:
    try:
        pass
    except:
        pass
finally:
    pass

2

몇 가지 답변은 이미 현재 파이썬 버전 을 쿼리 하는 방법을 제안합니다 . 프로그래밍 방식으로 버전 요구 사항 을 확인 하기 위해 다음 두 가지 방법 중 하나를 사용합니다.

# Method 1: (see krawyoti's answer)
import sys
assert(sys.version_info >= (2,6))

# Method 2: 
import platform
from distutils.version import StrictVersion 
assert(StrictVersion(platform.python_version()) >= "2.6")

2

재미를 위해 다음은 CPython 1.0-3.7b2, Pypy, Jython 및 Micropython에서 수행하는 방법입니다. 이것은 현대 코드에서 수행하는 방법보다 호기심이 많습니다. http://stromberg.dnsalias.org/~strombrg/pythons/의 일부로 작성했습니다. 이 코드는 여러 버전의 Python에서 한 번에 코드 스 니펫을 테스트하기위한 스크립트이므로 파이썬에 대한 느낌을 쉽게 얻을 수 있습니다 기능은 어떤 버전의 파이썬과 호환됩니다.

via_platform = 0
check_sys = 0
via_sys_version_info = 0
via_sys_version = 0
test_sys = 0
try:
    import platform
except (ImportError, NameError):
    # We have no platform module - try to get the info via the sys module
    check_sys = 1

if not check_sys:
    if hasattr(platform, "python_version"):
        via_platform = 1
    else:
        check_sys = 1

if check_sys:
    try:
        import sys
        test_sys = 1
    except (ImportError, NameError):
        # just let via_sys_version_info and via_sys_version remain False - we have no sys module
        pass

if test_sys:
    if hasattr(sys, "version_info"):
        via_sys_version_info = 1
    elif hasattr(sys, "version"):
        via_sys_version = 1
    else:
        # just let via_sys remain False
        pass

if via_platform:
    # This gives pretty good info, but is not available in older interpreters.  Also, micropython has a
    # platform module that does not really contain anything.
    print(platform.python_version())
elif via_sys_version_info:
    # This is compatible with some older interpreters, but does not give quite as much info.
    print("%s.%s.%s" % sys.version_info[:3])
elif via_sys_version:
    import string
    # This is compatible with some older interpreters, but does not give quite as much info.
    verbose_version = sys.version
    version_list = string.split(verbose_version)
    print(version_list[0])
else:
    print("unknown")

2

파이썬 버전을 확인합니다 : python -V하거나 python --version또는apt-cache policy python

whereis python설치된 버전 수 를 확인하기 위해 실행할 수도 있습니다 .


3
같은 답변이 이미 게시되었습니다. 질문은 "설치 한 파이썬 버전을 어떻게 확인합니까?"가 아닙니다. "스크립트에서 버전을 어떻게 확인합니까?"
Stanley Kou

2

Python 3 이전 버전을 감지하고 가져 오기를 원하지 않는 경우 ...

... 목록 이해 범위 변경을 (ab) 사용하고 단일 표현식으로 수행 할 수 있습니다 .

is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)

2

Windows에서 명령의 Python 버전을 확인하려면 명령 프롬프트에서 다음 명령을 실행하고 출력을 확인하십시오.

c:\>python -V
Python 2.7.16

c:\>py -2 -V
Python 2.7.16

c:\>py -3 -V
Python 3.7.3

또한 각 Python 버전의 폴더 구성을 보려면 다음 명령을 실행하십시오.

For Python 2,'py -2 -m site'
For Python 3,'py -3 -m site'

2
from sys import version_info, api_version, version, hexversion

print(f"sys.version: {version}")
print(f"sys.api_version: {api_version}")
print(f"sys.version_info: {version_info}")
print(f"sys.hexversion: {hexversion}")

산출

sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
sys.api_version: 1013
sys.version_info: sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)
sys.hexversion: 50726384

Python 2.7의 경우을 사용해야합니다 print("sys.version: {}".format(version)).
마르코

@Marco, 그렇습니다. 문자열 인수는 키워드 인수와 함께 v 3+에 대해 수행됩니다. 인쇄로 할 수 있습니다 ( '[{}, {}, {}]'형식 (1,2,3).) 파이썬 2.7이 타이밍 : stackoverflow.com/questions/517355/string-formatting-in-python
oetzi

1

sys.version_infotuple3.7 을 반환하지 않는 것 같습니다 . 오히려 특수 클래스를 반환하므로 튜플을 사용하는 모든 예제가 작동하지 않습니다. 다음은 파이썬 콘솔의 출력입니다.

>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>

나는의 조합을 사용하여 것으로 나타났습니다 sys.version_info.majorsys.version_info.minor충분할 것 같다. 예를 들어 ...

import sys
if sys.version_info.major > 3:
    print('Upgrade to Python 3')
    exit(1)

파이썬 3을 실행하고 있는지 확인합니다. 더 구체적인 버전을 확인할 수도 있습니다 ...

import sys
ver = sys.version_info
if ver.major > 2:
    if ver.major == 3 and ver.minor <= 4:
        print('Upgrade to Python 3.5')
        exit(1)

Python 3.5 이상을 실행 중인지 확인할 수 있습니다.


그것은 하위 클래스와 같 namedtuple으며 tuple과 비교하면 확실히 작동합니다. 완전한 평등을 얻으려면 메이저, 마이너, 마이크로, 릴리스 레벨 (문자열) 및 일련 번호의 5 가지 요소가 필요합니다.
Mikhail Edoshin

0

가장 간단한 방법 :

Spyder에서 새로운 "IPython Console"을 시작한 다음 기존 스크립트를 실행하십시오.

이제 버전은 콘솔 창에 인쇄 된 첫 번째 출력에서 ​​볼 수 있습니다.

"Python 3.7.3 (기본값, 2019 년 4 월 24 일, 15:29:51) ..."

여기에 이미지 설명을 입력하십시오


0

하나의 단일 명령으로 명령 줄에서 확인하지만 주 버전, 부 버전, 마이크로 버전, 릴리스 수준 및 일련 번호를 포함합니다 .

> python -c "import sys; print('{}.{}.{}-{}-{}'.format(*sys.version_info))"

3.7.6-final-0

참고 : .format()f- 문자열 대신 또는 '.'.join()임의 형식 및 구분 문자를 사용할 수 있습니다 (예 :이를 한 단어 문자열로 사용할 수 있도록). 파이썬, numpy, pandas, sklearn, MacOS, xcode, clang, brew, conda, anaconda, gcc / g ++ 등 모든 중요한 버전을보고하는 bash 유틸리티 스크립트에 이것을 넣었습니다. 로깅, 복제 성, 문제 해결 등에 버그 .


-1

리눅스에서 작업하는 경우 명령 python 출력을 다음과 같이하십시오.

파이썬 2.4.3 (# 1, 2009 년 6 월 11 일, 14:09:37)

linux2의 [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)]

자세한 내용은 "도움말", "저작권", "신용"또는 "라이센스"를 입력하십시오.


5
파이썬 스크립트가 그것을 해석하는 파이썬 버전을 얻을 수 있기를 바랍니다. 정답이 수락되었습니다.
carrier

Python스크립트 내에서 버전 을 얻는 데 도움이되지 않습니다. 이전에 이미 게시 된 비슷한 답변 : stackoverflow.com/a/35294211/950762
Akif
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.