如何查看Python解释器的哪个版本正在解释我的脚本?
答案 0 :(得分:1199)
此信息位于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
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192
要确保脚本以Python解释器的最低版本要求运行,请将其添加到您的代码中:
assert sys.version_info >= (2, 5)
这会比较主要和次要版本信息。根据需要,将微量(= 0
,1
等)甚至释放级别(= 'alpha'
,'final'
等)添加到元组中。但请注意,“躲避”检查是否存在某个特征,如果没有,则解决方法(或挽救)几乎总是更好。有时功能会在较新的版本中消失,被其他版本取代。
答案 1 :(得分:322)
从命令行(注意大写'V'):
python -V
这在'man python'中有记载。
答案 2 :(得分:94)
我喜欢sys.hexversion
这样的东西。
http://docs.python.org/library/sys.html#sys.hexversion
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
答案 3 :(得分:62)
你最好的选择可能就是这样:
>>> 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!"
>>>
答案 4 :(得分:54)
使用stdlib中的platform
's python_version
:
>>> from platform import python_version
>>> print(python_version())
2.7.8
答案 5 :(得分:46)
如下所示:
#!/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可能无法加载脚本,因此无法报告此错误。作为一种变通方法,您可以在脚本中运行上述内容,该脚本使用更现代的代码导入脚本。
答案 6 :(得分:22)
这是一个简短的命令行版本,可以直接退出(方便脚本和自动执行):
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)
答案 7 :(得分:7)
使用six
模块,您可以通过以下方式完成:
import six
if six.PY2:
# this is python2.x
else:
# six.PY3
# this is python3.x
答案 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.
>>>
答案 9 :(得分:5)
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
答案 10 :(得分:4)
import sys
sys.version.split(' ')[0]
sys.version为您提供所需内容,只需选择第一个数字:)
答案 11 :(得分:3)
检查Python版本:python -V
或python --version
或apt-cache policy python
您还可以运行whereis python
以查看已安装的版本数量。
答案 12 :(得分:2)
要在运行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 (脚本可能很容易转换为其他操作系统脚本。)
答案 13 :(得分:2)
几个答案已经建议如何查询当前的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")
答案 14 :(得分:1)
只是为了好玩,以下是在CPython 1.0-3.7b2,Pypy,Jython和Micropython上进行此操作的方法。这更像是一种好奇心,而不是现代代码中的一种方式。我把它作为http://stromberg.dnsalias.org/~strombrg/pythons/的一部分编写,这是一个用于在许多版本的python上同时测试代码片段的脚本,因此您可以轻松了解哪些python功能与哪些版本的python兼容: / p>
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")
答案 15 :(得分:1)
sys.version_info
似乎没有返回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)
检查是否正在运行Python3。您甚至可以使用...检查更特定的版本。
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。
答案 16 :(得分:0)
...您可以(ab)使用列表理解作用域更改,并以单个表达式进行操作:
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
答案 17 :(得分:0)
要在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'
答案 18 :(得分:0)
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
答案 19 :(得分:0)
最简单的方法:
在Spyder中,启动新的“ IPython控制台”,然后运行任何现有脚本。
现在可以在控制台窗口中打印的第一个输出中看到该版本:
“ Python 3.7.3(默认值,2019年4月24日,15:29:51)...”
答案 20 :(得分:0)
要在命令行中执行一个命令,但要包含主要,次要,微型版本,发行版和序列号,然后调用与您相同的Python解释器(即相同路径)重新使用您的脚本:
> path/to/your/python -c "import sys; print('{}.{}.{}-{}-{}'.format(*sys.version_info))"
3.7.6-final-0
注意:.format()
代替f字符串或'.'.join()
允许您使用任意格式和分隔符,例如使其成为一个可抓取的单字字符串。我将其放在报告所有重要版本的bash实用程序脚本中:python,numpy,pandas,sklearn,MacOS,xcode,clang,brew,conda,anaconda,gcc / g ++等。对于日志记录,可复制性,故障排除,错误报告等非常有用
答案 21 :(得分:0)
尝试使用os.popen
在变量中读取它:
import os
ver = os.popen('python -V').read().strip()
print(ver)
答案 22 :(得分:-1)
如果您正在使用linux,则只需输入命令python
即可。
Python 2.4.3(#1,2009年6月11日,14:09:37)
[gCC 4.1.2 20080704(Red Hat 4.1.2-44)] on linux2
输入“help”,“copyright”,“credit”或“license”了解更多信息 信息。
答案 23 :(得分:-2)
最干净的解决方案是使用sys.version_info
。但是,这需要import sys
。
还有另一种不需要任何导入的解决方案,因此可以插入到任何地方:
if str is bytes:
print 'Python <= 2.7'
else:
print 'Python >= 3.0'
但是,只有在您确定当时没有人把str
弄乱的情况下,才应该这样做。也就是说,str = unicode
之类的其他可移植性修补程序仅应在该代码之后使用。