web-dev-qa-db-ja.com

どのバージョンのPythonでスクリプトが実行されているかを確認するにはどうすればよいですか。

どのバージョンのPythonインタプリタが自分のスクリプトを解釈しているのかを確認するにはどうすればよいですか?

996
carrier

この情報は、 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)

これはメジャーバージョンとマイナーバージョンの情報を比較します。 micro(= 01など)を追加し、さらにレベル(= 'alpha''final'など)をTupleに追加します。ただし、特定の機能が存在するかどうかを確認し、存在しない場合は回避策を講じる(または回避する)ことをお勧めします。他のものに置き換えられて、新しいリリースで機能が消えることがあります。

1155
krawyoti

コマンドラインから(大文字の「V」に注意)。

python -V

これは 'man python'に文書化されています。

305
jcolino

私はこのようなもののためにsys.hexversionが好きです。

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

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

あなたの最善の策はおそらくそのようなものです: 

>>> 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!"
>>>
62
Seth

Stdlibから platformpython_version を使用します。

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

のようなものを置く:

#!/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ではスクリプトをロードできない可能性があるため、このエラーを報告するのに十分なものにはなりません。回避策として、より現代的なコードでスクリプトをインポートするスクリプトで上記を実行することができます。

46
rjmunro

これはすぐに終了する短いコマンドライン版です(スクリプトや自動実行に便利です)。

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)
21
Wolph

sixモジュールを使うと、次のようにすることができます。

import six

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

最も簡単な方法

端末に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.
>>> 
6
cjahangir

Sethが言ったように、メインスクリプトはsys.version_infoをチェックすることができます(しかしそれは2.0まで現れなかったので、もしあなたが古いバージョンをサポートしたいのならsysモジュールの別のversionプロパティをチェックする必要があるでしょう).

それでも、古いバージョンのPythonでは利用できないファイル内のPython言語機能を使用しないように注意する必要があります。たとえば、これはPython 2.5以降で許可されています。

try:
    pass
except:
    pass
finally:
    pass

ただし、古いPythonバージョンでは動作しません。これは、最後にtry [OR]以外を指定するだけで済みます。だから古いPythonのバージョンとの互換性のためにあなたが書く必要があります:

try:
    try:
        pass
    except:
        pass
finally:
    pass
5
Heikki Toivonen
import sys
sys.version.split(' ')[0]

sys.versionはあなたが望むものをあなたに与えます、ただ最初の数を選びなさい:)

4
fengshaun

Pythonのバージョンを確認してください:python -Vまたはpython --versionまたはapt-cache policy python

インストールされているバージョンの数を確認するためにwhereis pythonを実行することもできます。

3
Shusen Yi

Pythonインタプリタを実行する前にバージョンをチェックするMSDOSスクリプトを見るには(Pythonバージョンの構文の例外を避けるために)解決策を参照してください。

新しい言語機能を使用するプログラムでPythonのバージョンを確認する方法を教えてください。

そして 

MSスクリプトPythonのバージョンをチェックするPythonモジュール http://Pastebin.com/aAuJ91FQ (他のOSスクリプトに変換するのはおそらく簡単なスクリプト)

2
DevPlayer

いくつかの答えはすでに query 現在のPythonバージョンをどう使うかを示唆しています。 チェック プログラムでバージョン要件を確認するには、次の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
normanius

楽しみのためだけに、以下はCPython 1.0-3.7b2、Pypy、JythonおよびMicropythonでそれを行う方法です。これは現代のコードでそれを行う方法よりも好奇心が強いです。私は http://stromberg.dnsalias.org/~strombrg/pythons/ の一部としてそれを書きました。これは一度に多くのバージョンのpythonでコードの断片をテストするためのスクリプトです。どのPython機能がどのバージョンの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")
1
dstromberg

sys.version_infoは3.7の時点でTupleを返していないようです。むしろ、それは特別なクラスを返すので、少なくとも私にとっては、タプルを使った例はすべてうまくいきません。これがPythonコンソールからの出力です。

>>> 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)

python 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以上で動作しているかどうかを確認できます。

1
Parker E.

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'
0
Aamir M Meman

Python 3より前のバージョンを検出したいがインポートしたくない場合は...

...(ab)リスト内包表記スコープの変更を(/)使用して、 単一の式で行うことができます

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