我想在Linux系统上检测Python是否已安装,如果已安装,还需要知道安装了哪个版本的Python。
如何做到这一点?除了解析"python --version"
命令的输出之外,还有更优美的方式吗?
我想在Linux系统上检测Python是否已安装,如果已安装,还需要知道安装了哪个版本的Python。
如何做到这一点?除了解析"python --version"
命令的输出之外,还有更优美的方式吗?
您可以按照以下方式使用:
$ python -c 'import sys; print(sys.version_info[:])'
(2, 6, 5, 'final', 0)
这个元组的文档在这里。你可以扩展上面的Python代码来格式化版本号,使其适合你的需求,或者对其进行检查。
在你的脚本中,你需要检查$?
以处理找不到python
的情况。
附言:我使用略微奇怪的语法,以确保与Python 2.x和3.x兼容。
export PYTHON_VERSION=\
python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'``
比下面的正则表达式方法更简洁。 - DragonTuxif ! python3 -c 'import sys; assert sys.version_info >= (3,6)' > /dev/null; then
- Thomasif ! python -c 'import sys; assert sys.version_info[:2] == (3,9)' > /dev/null; then
- Laurentpython
二进制文件,但有 python3
。此外,@DragonTux 的评论应该包含在答案中,因为如何在 shell 中连接 Python 元组并不明显。 - copycatpython -c 'import sys; print sys.version_info'
或者,更容易理解的方式:
python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))'
print
周围加上括号。 - Bostonepyv="$(python -V 2>&1)"
echo "$pyv"
我使用Jahid的答案,结合从字符串中提取版本号的方法,在纯shell中编写了一些东西。它只返回版本号,而不是单词“Python”。如果字符串为空,则表示未安装Python。
version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)')
if [[ -z "$version" ]]
then
echo "No Python!"
fi
假设你想比较版本号以查看是否正在使用最新版本的Python,请使用以下内容删除版本号中的句点。然后,您可以使用整数运算符比较版本,例如“我想要Python版本大于2.7.0且小于3.0.0”。
参考资料:${var//Pattern/Replacement}在http://tldp.org/LDP/abs/html/parameter-substitution.html
parsedVersion=$(echo "${version//./}")
if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]]
then
echo "Valid version"
else
echo "Invalid version"
fi
这里是另一种解决方案,使用哈希来验证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
if ! hash python
是如何工作的吗?man手册上说:“/usr/bin/hash 实用程序会影响当前shell环境记住找到的实用程序的位置的方式。”所以如果它类似于先前运行命令的缓存,那么如果我以前从未运行过 python
,这个检查是否仍然有效呢? - Atav32您可以在Bash中使用此命令:
PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";`
echo $PYV
如果你想在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
在可能的解决方案长列表中,这里有一个类似于被接受答案的解决方案 - 除了它内置了一个简单的版本检查:
python -c 'import sys; exit(1) if sys.version_info.major < 3 and sys.version_info.minor < 5 else exit(0)'
如果Python已安装并且版本<3.5,则将返回0,否则将返回1:
3.5
要检查值,只需比较$?
(假设是bash
),如其他问题中所示。
请注意,这不允许检查Python2
的不同版本 - 因为上述单行器将在Py2中引发异常。但是,由于Python2
即将退出历史舞台,这不应该是一个问题。
sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 5)
。 - Edouard Thiel在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