スクリプトを解釈しているPythonインタープリターのバージョンを確認するにはどうすればよいですか?
24 に答える
この情報は、モジュールのsys.version文字列で利用できます。sys
>>> 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またはを使用しsys.hexversionます。
>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192
Pythonインタープリターの最小バージョン要件でスクリプトが実行されるようにするには、これをコードに追加します。
assert sys.version_info >= (2, 5)
これにより、メジャーバージョン情報とマイナーバージョン情報が比較されます。必要に応じて、マイクロ(= 0、1など)およびリリースレベル(= 'alpha'、'final'など)をタプルに追加します。ただし、ほとんどの場合、特定の機能が存在するかどうかを「ダック」チェックし、存在しない場合は回避策(またはベイルアウト)を行う方がよいことに注意してください。新しいリリースでは機能がなくなり、他の機能に置き換えられることがあります。
コマンドラインから(大文字の「V」に注意):
python -V
これは「manpython」で文書化されています。
IPythonコンソールから
!python -V
私はこのようなsys.hexversionものが好きです。
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
stdlibからのplatformをpython_version使用します。
from platform import python_version
print(python_version())
# 3.9.2
あなたの最善の策はおそらくそのようなものです:
>>> 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!"
>>>
次のようなものを入れてください:
#!/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
import sys
sys.version.split(' ')[0]
sys.versionはあなたが望むものを提供します、ただ最初の番号を選んでください:)
Sethが言ったように、メインスクリプトはチェックできますsys.version_info(ただし、2.0まで表示されなかったため、古いバージョンをサポートする場合は、sysモジュールの別のバージョンプロパティをチェックする必要があります)。
ただし、古いバージョンのPythonでは使用できないファイル内のPython言語機能を使用しないように注意する必要があります。たとえば、これはPython2.5以降で許可されています。
try:
pass
except:
pass
finally:
pass
ただし、古いPythonバージョンでは機能しません。これは、ORを除いて、最終的にtryに一致することしかできないためです。したがって、古いPythonバージョンとの互換性のために、次のように記述する必要があります。
try:
try:
pass
except:
pass
finally:
pass
いくつかの回答は、現在の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")
Python 3より前のバージョンを検出し、何もインポートしたくない場合...
...リスト内包表記の変更を(乱用)使用して、単一の式で実行できます:
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
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と入力するだけで、次のようなバージョンが表示されます。
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.
>>>
Pythonのバージョンを確認してください:python -Vまたはpython --versionまたはapt-cache policy python
実行whereis pythonして、インストールされているバージョンの数を確認することもできます。
sys.version_infotuple3.7の時点ではを返さないようです。むしろ、それは特別なクラスを返すので、少なくとも私にとっては、タプルを使用したすべての例が機能するわけではありません。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)
少なくともPython3.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'
コマンドラインから1つのコマンドで確認するには、メジャー、マイナー、マイクロバージョン、リリースレベル、シリアルを含めてから、スクリプトに使用しているものと同じPythonインタープリター(つまり同じパス)を呼び出します。
> path/to/your/python -c "import sys; print('{}.{}.{}-{}-{}'.format(*sys.version_info))"
3.7.6-final-0
注:.format()f文字列の代わりに、または'.'.join()任意の書式設定と区切り文字を使用できるようにします。たとえば、これをgreppable1単語の文字列にします。これを、すべての重要なバージョンを報告するbashユーティリティスクリプト内に配置します:python、numpy、pandas、sklearn、MacOS、xcode、clang、brew、conda、anaconda、gcc / g ++など。ロギング、複製可能性、バグレポートのトラブルシューティングなどに役立ちます。
Windowsの場合、コマンドプロンプトに移動し、次のコマンドを入力してPythonバージョンを取得します。
python --version
または
python -V
2.7これは、、3.6またはを返すだけです3.9
import sys
current_version = ".".join(map(str, sys.version_info[0:2]))
これはあなたが通常必要とするものです...
Linuxで作業している場合は、コマンドpython 出力を与えるだけで次のようになります
Python 2.4.3(#1、2009年6月11日、14:09:37)
linux2の[GCC4.1.220080704(Red Hat 4.1.2-44)]
詳細については、「help」、「copyright」、「credits」、または「license」と入力してください。
os.popen変数でそれを読み取るために使用する試み:
import os
ver = os.popen('python -V').read().strip()
print(ver)
