kra*_*oti 1300
此信息位于sys模块的sys.version字符串中:
>>> import sys
Run Code Online (Sandbox Code Playgroud)
人类可读:
>>> 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)]
Run Code Online (Sandbox Code Playgroud)
进一步处理:
>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192
Run Code Online (Sandbox Code Playgroud)
要确保脚本以Python解释器的最低版本要求运行,请将其添加到您的代码中:
assert sys.version_info >= (2, 5)
Run Code Online (Sandbox Code Playgroud)
这将比较主要和次要版本信息.加入微(= 0,1等等),甚至releaselevel(= 'alpha','final'等)的元组,只要你喜欢.但请注意,"躲避"检查是否存在某个特征,如果没有,则解决方法(或挽救)几乎总是更好.有时功能会在较新版本中消失,被其他版本取代.
小智 347
从命令行(注意大写'V'):
python -V
Run Code Online (Sandbox Code Playgroud)
这在'man python'中有记载.
bri*_*anz 95
我喜欢这样sys.hexversion的东西.
http://docs.python.org/library/sys.html#sys.hexversion
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
Run Code Online (Sandbox Code Playgroud)
Set*_*eth 63
你最好的选择可能是这样的:
>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)
此外,您始终可以在简单的尝试中包装导入,这应该会捕获语法错误.而且,对于@Heikki而言,这段代码将与许多旧版本的python兼容:
>>> try:
... from my_module import twoPointSixCode
... except Exception:
... print "can't import, probably because your python is too old!"
>>>
Run Code Online (Sandbox Code Playgroud)
Bil*_*ill 57
使用platform的python_version从STDLIB:
>>> from platform import python_version
>>> print(python_version())
2.7.8
Run Code Online (Sandbox Code Playgroud)
rjm*_*nro 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)
Run Code Online (Sandbox Code Playgroud)
在脚本的顶部.
请注意,根据脚本中的其他内容,比目标更旧的python版本可能无法加载脚本,因此无法报告此错误.作为一种变通方法,您可以在脚本中运行上述内容,该脚本使用更现代的代码导入脚本.
Wol*_*lph 22
这是一个简短的命令行版本,可以直接退出(方便脚本和自动执行):
python -c "print(__import__('sys').version)"
Run Code Online (Sandbox Code Playgroud)
或者只是主要,次要和微观:
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)
Run Code Online (Sandbox Code Playgroud)
Dzh*_*ang 12
使用six模块,您可以通过以下方式完成:
import six
if six.PY2:
# this is python2.x
else:
# six.PY3
# this is python3.x
Run Code Online (Sandbox Code Playgroud)
import sys
sys.version.split(' ')[0]
Run Code Online (Sandbox Code Playgroud)
sys.version提供您想要的,只需选择第一个数字即可:)
像Seth所说,主脚本可以检查sys.version_info(但请注意,直到2.0才出现,所以如果你想支持旧版本,你需要检查sys模块的另一个版本属性).
但是你仍然需要注意不要在文件中使用旧的Python版本中没有的任何Python语言功能.例如,Python 2.5及更高版本允许这样做:
try:
pass
except:
pass
finally:
pass
Run Code Online (Sandbox Code Playgroud)
但是不适用于较旧的Python版本,因为除了OR之外你最终只能匹配try.因此,为了与旧的Python版本兼容,您需要编写:
try:
try:
pass
except:
pass
finally:
pass
Run Code Online (Sandbox Code Playgroud)
几个答案已经建议如何查询当前的 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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1419712 次 |
| 最近记录: |