どのバージョンのPythonインタプリタが自分のスクリプトを解釈しているのかを確認するにはどうすればよいですか?
この情報は、 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(= 0
、1
など)を追加し、さらにレベル(= 'alpha'
、'final'
など)をTupleに追加します。ただし、特定の機能が存在するかどうかを確認し、存在しない場合は回避策を講じる(または回避する)ことをお勧めします。他のものに置き換えられて、新しいリリースで機能が消えることがあります。
コマンドラインから(大文字の「V」に注意)。
python -V
これは 'man python'に文書化されています。
私はこのようなもののためにsys.hexversion
が好きです。
http://docs.python.org/library/sys.html#sys.hexversion
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
あなたの最善の策はおそらくそのようなものです:
>>> 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!"
>>>
Stdlibから platform
のpython_version
を使用します。
>>> from platform import python_version
>>> print(python_version())
2.7.8
のようなものを置く:
#!/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ではスクリプトをロードできない可能性があるため、このエラーを報告するのに十分なものにはなりません。回避策として、より現代的なコードでスクリプトをインポートするスクリプトで上記を実行することができます。
これはすぐに終了する短いコマンドライン版です(スクリプトや自動実行に便利です)。
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)
six
モジュールを使うと、次のようにすることができます。
import six
if six.PY2:
# this is python2.x
else:
# six.PY3
# this is python3.x
端末に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.
>>>
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
import sys
sys.version.split(' ')[0]
sys.versionはあなたが望むものをあなたに与えます、ただ最初の数を選びなさい:)
Pythonのバージョンを確認してください:python -V
またはpython --version
またはapt-cache policy python
インストールされているバージョンの数を確認するためにwhereis python
を実行することもできます。
Pythonインタプリタを実行する前にバージョンをチェックするMSDOSスクリプトを見るには(Pythonバージョンの構文の例外を避けるために)解決策を参照してください。
新しい言語機能を使用するプログラムでPythonのバージョンを確認する方法を教えてください。
そして
MSスクリプトPythonのバージョンをチェックするPythonモジュール http://Pastebin.com/aAuJ91FQ (他のOSスクリプトに変換するのはおそらく簡単なスクリプト)
いくつかの答えはすでに 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")
楽しみのためだけに、以下は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")
sys.version_info
は3.7の時点でTuple
を返していないようです。むしろ、それは特別なクラスを返すので、少なくとも私にとっては、タプルを使った例はすべてうまくいきません。これがPythonコンソールからの出力です。
>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>
私はsys.version_info.major
とsys.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以上で動作しているかどうかを確認できます。
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'
...(ab)リスト内包表記スコープの変更を(/)使用して、 単一の式で行うことができます :
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)