回答(18)
2 years ago
sys.version_info 似乎从3.7返回 tuple . 相反,它返回一个特殊的类,所以使用元组的所有示例都不是来自python控制台的输出:
>>> import sys
>>> type(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 .
2 years ago
使用 six 模块,您可以通过以下方式完成:
import six
if six.PY2:
# this is python2.x
else:
# six.PY3
# this is python3.x
2 years ago
只是为了好玩,以下是在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")
2 years ago
2 years ago
从命令行(注意大写'V'):
python -V
这在'man python'中有记载 .
2 years ago
几个答案已经建议如何查询当前的python版本 . 要以编程方式检查版本要求,我将使用以下两种方法之一:
# 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 years ago
你最好的选择可能是这样的:
>>> 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!"
>>>
2 years ago
如果你正在使用linux只是给命令 python 输出将是这样的
Python 2.4.3(#1,Jun 11 2009,14:09:37)[GCC 4.1.2 20080704(Red Hat 4.1.2-44)] on linux2输入“help”,“copyright”,“credits”或“许可证”了解更多信息 .
2 years ago
像这样的东西:
#!/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版本可能无法加载脚本,因此无法报告此错误 . 作为一种变通方法,您可以在脚本中运行上述内容,该脚本使用更现代的代码导入脚本 .
2 years ago
像Seth所说,主脚本可以检查 sys.version_info (但请注意,直到2.0才出现,所以如果你想支持旧版本,你需要检查sys模块的另一个版本属性) .
但是你仍然需要注意不要在文件中使用旧版Python中没有的任何Python语言功能 . 例如,Python 2.5及更高版本允许这样做:
try:
pass
except:
pass
finally:
pass
但是不适用于较旧的Python版本,因为除了OR之外你最终只能匹配try . 因此,为了与旧的Python版本兼容,您需要编写:
try:
try:
pass
except:
pass
finally:
pass
2 years ago
>>> 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 等)甚至releaselevel(= 'alpha' , 'final' 等)添加到元组中 . 但请注意,检查某个功能是否存在,如果没有,则解决方法(或挽救)几乎总是更好 . 有时功能会在较新的版本中消失,被其他版本取代 .
2 years ago
>>> from platform import python_version
>>> print(python_version())
2.7.8
2 years ago
最简单的方法
只需在终端中键入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.
>>>
2 years ago
我喜欢 sys.hexversion 这样的东西 .
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
2 years ago
这是一个简短的命令行版本,可以直接退出(方便脚本和自动执行):
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)
2 years ago
如果你想检测pre-Python 3并且不想导入任何东西......
...你可以(ab)使用列表理解范围更改并在_158353中执行:
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
2 years ago
import sys
sys.version.split(' ')[0]
sys.version为你提供你想要的东西,只需选择第一个数字:)
2 years ago
检查Python版本: python -V 或 python --version 或 apt-cache policy python
您还可以运行 whereis python 以查看安装了多少个版本 .