我想看看是否有任何方法需要一个最小的python版本.
由于新的异常处理(as
关键字),我有几个需要Python 2.6的python模块.
它看起来即使我在我的脚本开头检查python版本,代码也不会运行,因为解释器将在模块内部失败,抛出一个丑陋的系统错误而不是告诉用户使用更新的python.
Wal*_*ndt 37
您不应该在脚本本身内使用任何Python 2.6功能.此外,在导入需要新Python版本的任何模块之前,必须进行版本检查.
例如,像这样开始你的脚本:
#!/usr/bin/env python
import sys
if sys.version_info[0] != 2 or sys.version_info[1] < 6:
print("This script requires Python version 2.6")
sys.exit(1)
# rest of script, including real initial imports, here
Run Code Online (Sandbox Code Playgroud)
Ark*_*ady 28
您可以利用Python在比较元组时做正确的事实:
#!/usr/bin/python
import sys
MIN_PYTHON = (2, 6)
if sys.version_info < MIN_PYTHON:
sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON)
Run Code Online (Sandbox Code Playgroud)
Sco*_*ths 18
我发现这样做的最简单的方法(也参见这个问题)只是添加一行,如:
b'You need Python 2.6 or later.'
Run Code Online (Sandbox Code Playgroud)
在文件的开头.这利用了2.6中引入了字节文字的事实,因此任何早期版本都将SyntaxError
使用您编写的任何消息作为堆栈跟踪引发.
如果你需要Python 2.7,那么:
{'You need Python 2.7 or later.'}
Run Code Online (Sandbox Code Playgroud)
这是2.6中的语法错误.
对于Python 2.5,这应该工作:
'You need Python 2.5' if 'you want this to run or' else 'this line fails!'
Run Code Online (Sandbox Code Playgroud)
这是2.4中的语法错误.
Pio*_*ost 16
从版本9.0.0开始,pip 支持 分发元数据中的Requires-Python字段,该字段可以由版本24-2-0开始的setuptools编写.此功能可通过python_requires
关键字参数来实现setup
.
示例(在setup.py中):
setup(
...
python_requires='>=2.5,<2.7',
...
)
Run Code Online (Sandbox Code Playgroud)
要利用此功能,必须首先打包项目/脚本(如果尚未完成).这在典型情况下非常简单,应该尽可能地完成,因为它允许用户轻松安装,使用和卸载给定的项目/脚本.有关详细信息,请参阅Python Packaging用户指南.
sor*_*rin 10
import sys
if sys.hexversion < 0x02060000:
sys.exit("Python 2.6 or newer is required to run this program.")
import module_requiring_26
Run Code Online (Sandbox Code Playgroud)
关于这一点的很酷的部分是它可以包含在__init__
文件或模块中.
小智 7
我曾经有一个更复杂的方法来支持Python2和Python3,但我不再尝试支持Python2,所以现在我只使用:
import sys
MIN_PYTHON = (3, 7)
assert sys.version_info >= MIN_PYTHON, f"requires Python {'.'.join([str(n) for n in MIN_PYTHON])} or newer"
Run Code Online (Sandbox Code Playgroud)
如果版本检查失败,您会得到类似以下内容的回溯:
AssertionError: requires Python 3.7 or newer
Run Code Online (Sandbox Code Playgroud)
在底部。