在shell脚本中检测python版本

The*_*Neo 72 python shell

我想检测一下Linux系统上是否安装了python,如果是,安装了哪个python版本.

我该怎么做?有没有比解析输出更优雅的东西"python --version"

NPE*_*NPE 73

你可以使用以下几行:

$ python -c 'import sys; print(sys.version_info[:])'
(2, 6, 5, 'final', 0)
Run Code Online (Sandbox Code Playgroud)

这里记录元组.您可以扩展上面的Python代码,以符合您要求的方式格式化版本号,或者实际上对其执行检查.

您需要检查$?脚本以处理python未找到的情况.

PS我使用稍微奇怪的语法来确保兼容Python 2.x和3.x.

  • 您还可以将结果存储在变量中:`export PYTHON_VERSION = \`python -c'import sys; 版本= sys.version_info [:3]; print("{0}.{1}.{2}".format(*version))'\``使用该解决方案.比下面的正则表达式更好. (6认同)
  • 对于因为想要确保安装了某个 python 版本而登陆这里的其他人:我将其与断言一起使用,因此我可以在 bash 脚本中使用它,如下所示:`if !python3 -c '导入系统;断言 sys.version_info >= (3,6)' > /dev/null; 那么` (3认同)
  • 以防万一您需要特定的主要.次要版本...`if!python -c '导入系统;断言 sys.version_info[:2] == (3,9)' > /dev/null; 那么` (2认同)

Fre*_*Foo 27

python -c 'import sys; print sys.version_info'
Run Code Online (Sandbox Code Playgroud)

或者,人类可读:

python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))'
Run Code Online (Sandbox Code Playgroud)


Jah*_*hid 17

您也可以使用它:

pyv="$(python -V 2>&1)"
echo "$pyv"
Run Code Online (Sandbox Code Playgroud)


Soh*_*b T 10

我使用Jahid的答案以及字符串中的Extract版本号 来制作纯粹用shell编写的东西.它也只返回一个版本号,而不是单词"Python".如果字符串为空,则不安装Python.

version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)')
if [[ -z "$version" ]]
then
    echo "No Python!" 
fi
Run Code Online (Sandbox Code Playgroud)

并且假设您要比较版本号以查看您是否使用最新版本的Python,请使用以下内容删除版本号中的句点.然后,您可以使用整数运算符比较版本,例如"我希望Python版本大于2.7.0且小于3.0.0".参考:http://tldp.org/LDP/abs/html/parameter-substitution.html中的$ {var // Pattern/Replacement}

parsedVersion=$(echo "${version//./}")
if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]]
then 
    echo "Valid version"
else
    echo "Invalid version"
fi
Run Code Online (Sandbox Code Playgroud)

  • 很好,谢谢你,但问题是某些版本的python返回4位数,其他3位数,例如Python 2.7.12,所以比较2712与300不起作用:( (2认同)

k2s*_*k2s 8

如果要比较shell脚本中的版本,使用sys.hexversion可能很有用

ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`
if [ $ret -eq 0 ]; then
    echo "we require python version <3"
else 
    echo "python version is <3"
fi
Run Code Online (Sandbox Code Playgroud)


log*_*ogc 8

您可以使用作为标准Python库一部分的平台模块:

$ python -c 'import platform; print(platform.python_version())'
2.6.9
Run Code Online (Sandbox Code Playgroud)

此模块允许您只打印版本字符串的一部分:

$ python -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor); print(patch)'
2
6
9
Run Code Online (Sandbox Code Playgroud)


Far*_*eed 7

您可以在bash中使用此命令:

PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";`
echo $PYV
Run Code Online (Sandbox Code Playgroud)


Lil*_*lás 7

这是另一种解决方案,使用哈希来验证是否安装了python并使用sed来提取版本的前两个主要编号并比较是否安装了最低版本

if ! hash python; then
    echo "python is not installed"
    exit 1
fi

ver=$(python -V 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/')
if [ "$ver" -lt "27" ]; then
    echo "This script requires python 2.7 or greater"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)


nls*_*bch 6

添加到一长串可能的解决方案中,这里有一个与接受的答案类似的解决方案 - 除了它内置了一个简单的版本检查:

python -c 'import sys; exit(1) if sys.version_info.major < 3 and sys.version_info.minor < 5 else exit(0)'
Run Code Online (Sandbox Code Playgroud)

如果安装了 python 并且至少是 versions 3.5,这将返回 0 ,并在以下情况下返回1

  • 未安装 Python
  • Python已安装,但其版本低于版本 3.5

要检查值,只需比较$?(假设bash),如其他问题所示。

请注意,这不允许检查不同的版本Python2- 因为上面的单行代码将在 Py2 中引发异常。但是,由于Python2正在出门,这应该不是问题。


Rob*_*ujo 6

在 shell 脚本中检测 python 版本 2+ 或 3+:

# !/bin/bash
ver=$(python -c"import sys; print(sys.version_info.major)")
if [ $ver -eq 2 ]; then
    echo "python version 2"
elif [ $ver -eq 3 ]; then
    echo "python version 3"
else 
    echo "Unknown python version: $ver"
fi
Run Code Online (Sandbox Code Playgroud)