Bagaimana saya dapat periksa apa versi Interpreter Python adalah menafsirkan naskah saya?
Informasi ini tersedia dalam sys.versi string di sys modul:
>>> import sys
Yang dapat dibaca manusia:
>>> 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)]
Untuk pengolahan lebih lanjut:
>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192
Untuk memastikan script berjalan dengan versi minimal kebutuhan interpreter Python menambahkan ini ke kode anda:
assert sys.version_info >= (2, 5)
Hal ini dibandingkan versi besar dan kecil informasi. Tambahkan micro (=0
, 1
, dll) dan bahkan releaselevel (='alpha'
,'akhir'
, dll) untuk tupel yang anda inginkan. Namun perlu dicatat, bahwa hal ini hampir selalu lebih baik untuk "bebek" periksa apakah fitur tertentu yang ada, dan jika tidak, pemecahan masalah (atau bail out). Kadang-kadang fitur yang hilang di rilis baru, yang diganti oleh orang lain.
Anda bertaruh terbaik adalah mungkin sesuatu seperti:
>>> 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
>>>
Selain itu, anda selalu dapat membungkus impor secara sederhana mencoba, yang harus menangkap kesalahan sintaks. Dan, untuk @Heikki's point, kode ini akan kompatibel dengan versi python:
>>> try:
... from my_module import twoPointSixCode
... except Exception:
... print "can't import, probably because your python is too old!"
>>>
Gunakan platform
's python_version
dari stdlib:
>>> from platform import python_version
>>> print(python_version())
2.7.8
Menempatkan sesuatu seperti:
#!/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)
di bagian atas script.
Perhatikan bahwa tergantung pada apa lagi di script, versi python dari target mungkin tidak dapat bahkan memuat script, jadi tidak't mendapatkan cukup jauh untuk melaporkan kesalahan ini. Sebagai solusi, anda dapat berjalan di atas pada script yang impor script dengan lebih modern kode.
Berikut ini's pendek commandline versi yang keluar langsung (berguna untuk script dan eksekusi otomatis):
python -c "print(__import__('sys').version)"
Atau hanya besar, kecil dan mikro:
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)
Hanya jenis python di terminal anda dan anda dapat melihat dalam versi sebagai seperti berikut
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.
>>>
Seperti Seth mengatakan, script utama bisa check sys.version_info
(tetapi perhatikan bahwa tidak't muncul sampai 2.0, jadi jika anda ingin mendukung versi lama anda akan perlu untuk memeriksa versi lain milik sys modul).
Tapi anda masih perlu untuk mengurus tidak menggunakan Python fitur bahasa dalam file yang tidak tersedia di versi Python lebih tua. Sebagai contoh, hal ini diperbolehkan dalam Python 2.5 dan kemudian:
try:
pass
except:
pass
finally:
pass
tapi tidak't bekerja pada versi Python lebih tua, karena anda hanya bisa kecuali ATAU akhirnya pertandingan yang mencoba. Jadi untuk kompatibilitas dengan versi Python lebih tua yang anda butuhkan untuk menulis:
try:
try:
pass
except:
pass
finally:
pass
Beberapa jawaban sudah menyarankan bagaimana untuk query saat ini python versi. Untuk periksa pemrograman versi persyaratan, I'a menggunakan salah satu dari dua metode berikut:
# 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")
Hanya untuk bersenang-senang, berikut adalah cara untuk melakukannya pada CPython 1.0-3.7b2, Mount, kelompok dari setiap dua elemen dan Micropython. Ini lebih dari sebuah rasa ingin tahu dari cara untuk melakukan hal itu di modern kode. Saya menulis ini sebagai bagian dari http://stromberg.dnsalias.org/~strombrg/piton/ , yang merupakan script untuk pengujian cuplikan kode di banyak versi python sekaligus, sehingga anda dapat dengan mudah mendapatkan merasakan apa python fitur yang kompatibel dengan versi 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")
...anda dapat (ab)menggunakan daftar pemahaman ruang lingkup perubahan dan melakukannya dalam ekspresi tunggal:
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
sys.version_info
doesn't tampaknya kembali tupel
sebagai 3.7. Sebaliknya, itu kembali kelas khusus, sehingga semua contoh-contoh yang menggunakan tupel don't bekerja, bagi saya setidaknya. Berikut ini's output dari python:
>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>
I've menemukan bahwa menggunakan kombinasi sys.version_info.utama
dan sys.version_info.kecil
tampaknya cukup. Sebagai contoh,...
import sys
if sys.version_info.major > 3:
print('Upgrade to Python 3')
exit(1)
cek jika anda're menjalankan Python 3. Anda bahkan dapat memeriksa untuk yang lebih spesifik dengan versi...
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)
dapat memeriksa untuk melihat jika anda're menjalankan setidaknya Python 3.5.
Untuk memverifikasi Python versi untuk perintah pada Windows, jalankan perintah berikut di command prompt dan verifikasi output
c:\>python -V
Python 2.7.16
c:\>py -2 -V
Python 2.7.16
c:\>py -3 -V
Python 3.7.3
Juga, Untuk melihat folder konfigurasi untuk masing-masing Python versi, jalankan perintah berikut:
For Python 2,'py -2 -m site'
For Python 3,'py -3 -m site'
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}")
output
sys.versi: 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(besar=3, kecil=6, mikro=5, releaselevel='akhir', serial=0) sys.hexversion: 50726384
Jika anda bekerja pada linux hanya memberikan perintah python
output akan menjadi seperti ini
Python 2.4.3 (#1, 11 Jun 2009, 14:09:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "bantuan", "hak cipta", "kredit" atau "lisensi" untuk lebih informasi.