在Bash脚本中如何检查Python版本是否高于指定值?有无更优雅方案?
在Bash脚本里优雅检查Python版本是否达标
别再解析python --version了,坑太多
直接解析python --version的输出真的不靠谱:
- 不同Python版本的输出格式可能不一样,比如有些会额外显示构建信息,或者版本字符串的排版有差异
- 靠字符串切割、正则匹配来提取版本号,代码写起来麻烦,还容易因为格式变化报错
更靠谱的方法:让Python自己搞定版本判断
Python内置的sys.version_info本来就支持版本比较,直接在Bash里调用Python脚本做判断,兼容性和稳定性都比解析输出强得多。
示例:检查Python版本是否≥3.8
#!/bin/bash # 设置要求的最低版本 REQ_MAJOR=3 REQ_MINOR=8 # 调用Python做版本检查 python -c "import sys; sys.exit(not (sys.version_info >= ($REQ_MAJOR, $REQ_MINOR)))" # 根据退出码判断结果 if [ $? -eq 0 ]; then echo "Python版本够了(≥$REQ_MAJOR.$REQ_MINOR)" else echo "Error:Python版本太低,至少要$REQ_MAJOR.$REQ_MINOR,请升级后再试" exit 1 fi
为啥这么好用?
sys.version_info是个元组,格式是(主版本, 次版本, 微版本, ...),直接和指定的版本元组比大小就行,Python自己会处理版本逻辑sys.exit(not ...):版本符合要求就返回0(Bash里代表成功),不符合就返回1(失败),Bash只需要看$?的结果就行
扩展:检查到微版本(比如≥3.8.5)
要更精确的话,把版本元组加上微版本就行:
REQ_MAJOR=3 REQ_MINOR=8 REQ_MICRO=5 python -c "import sys; sys.exit(not (sys.version_info >= ($REQ_MAJOR, $REQ_MINOR, $REQ_MICRO)))"
区分Python2和Python3
如果系统里同时装了Python2和Python3,直接用python3命令检查就行:
python3 -c "import sys; sys.exit(not (sys.version_info >= (3,8)))"
内容的提问来源于stack exchange,提问作者Daniel Manoylo
相关产品推荐
相关产品推荐

