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")
>>> from platform import python_version
>>> print(python_version())
2.7.8
6
最简单的方法
只需在终端中键入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.
>>>
18 回答
使用
six
模块,您可以通过以下方式完成:sys.version_info
似乎从3.7返回tuple
. 相反,它返回一个特殊的类,所以使用元组的所有示例都不是来自python控制台的输出:我发现使用
sys.version_info.major
和sys.version_info.minor
的组合似乎就足够了 . 例如,...检查您是否正在运行Python 3.您甚至可以检查更具体的版本...
可以检查你是否至少运行Python 3.5 .
只是为了好玩,以下是在CPython 1.0-3.7b2,Pypy,Jython和Micropython上进行的一种方式 . 这更像是一种好奇心,而不是现代代码中的一种方式 . 我把它写成了http://stromberg.dnsalias.org/~strombrg/pythons/的一部分,这是一个用于在多个python版本上同时测试代码片段的脚本,因此您可以轻松了解哪些python功能与哪些版本的python兼容:
要在运行Python解释器之前查看MSDOS脚本以检查版本(以避免Python版本语法异常),请参阅解决方案:
How can I check for Python version in a program that uses new language features?
和
MS脚本; Python版本检查预启动Python模块http://pastebin.com/aAuJ91FQ(脚本可能很容易转换为其他操作系统脚本 . )
从命令行(注意大写'V'):
这在'man python'中有记载 .
几个答案已经建议如何查询当前的python版本 . 要以编程方式检查版本要求,我将使用以下两种方法之一:
你最好的选择可能是这样的:
此外,您始终可以通过简单的尝试来包装导入,这应该会捕获语法错误 . 而且,对于@ Heikki来说,这段代码将兼容许多旧版本的python:
如果你正在使用linux只是给命令
python
输出将是这样的像这样的东西:
在脚本的顶部 .
请注意,根据脚本中的其他内容,比目标更旧的python版本可能无法加载脚本,因此无法报告此错误 . 作为一种变通方法,您可以在脚本中运行上述内容,该脚本使用更现代的代码导入脚本 .
像Seth所说,主脚本可以检查
sys.version_info
(但请注意,直到2.0才出现,所以如果你想支持旧版本,你需要检查sys模块的另一个版本属性) .但是你仍然需要注意不要在文件中使用旧版Python中没有的任何Python语言功能 . 例如,Python 2.5及更高版本允许这样做:
但是不适用于较旧的Python版本,因为除了OR之外你最终只能匹配try . 因此,为了与旧的Python版本兼容,您需要编写:
此信息位于sys模块的sys.version字符串中:
人类可读:
进一步处理:
要确保脚本以Python解释器的最低版本要求运行,请将其添加到您的代码中:
这会比较主要和次要版本信息 . 根据需要将micro(=
0
,1
等)甚至releaselevel(='alpha'
,'final'
等)添加到元组中 . 但请注意,检查某个功能是否存在,如果没有,则解决方法(或挽救)几乎总是更好 . 有时功能会在较新的版本中消失,被其他版本取代 .使用stdlib中的platform's python_version:
最简单的方法
只需在终端中键入python,您就可以看到如下所示的版本
我喜欢
sys.hexversion
这样的东西 .http://docs.python.org/library/sys.html#sys.hexversion
这是一个简短的命令行版本,可以直接退出(方便脚本和自动执行):
或者只是主要,次要和微观:
如果你想检测pre-Python 3并且不想导入任何东西......
...你可以(ab)使用列表理解范围更改并在_158353中执行:
sys.version为你提供你想要的东西,只需选择第一个数字:)
检查Python版本:
python -V
或python --version
或apt-cache policy python
您还可以运行
whereis python
以查看安装了多少个版本 .