检查bash脚本中是否存在Python dev文件

时间:2011-01-31 07:34:00

标签: python bash

我正在创建一个简单的bash脚本来下载和安装python Nagios插件。在一些较旧的服务器上,脚本可能需要安装子进程模块,因此我需要确保安装了正确的python-devel文件。

检查这些文件的适当跨平台方法是什么。想远离rpm或apt。

如果你能告诉我如何在python中进行检查,那将是有效的。谢谢!

更新

这是我提出的最好的。任何人都知道更好或更确定的方法吗?

if [ ! -e $(python -c 'from distutils.sysconfig import get_makefile_filename as m; print m()') ]; then echo "Sorry"; fi

3 个答案:

答案 0 :(得分:5)

这就是我要做的事情。看似合理简单。

但是,如果我需要确定为当前版本的Python安装了python-devel文件,我会查找相关的Python.h文件。有点像:

# first, makes sure distutils.sysconfig usable
if ! $(python -c "import distutils.sysconfig.get_config_vars" &> /dev/null); then
    echo "ERROR: distutils.sysconfig not usable" >&2
    exit 2
fi

# get include path for this python version
INCLUDE_PY=$(python -c "from distutils import sysconfig as s; print s.get_config_vars()['INCLUDEPY']")
if [ ! -f "${INCLUDE_PY}/Python.h" ]; then
    echo "ERROR: python-devel not installed" >&2
    exit 3
fi

注意distutils.sysconfig可能不支持所有平台,因此不是最便携的解决方案,但仍然比尝试满足apt {{1}中的变体更好等等。

如果您确实需要支持所有平台,则可能值得探索AX_PYTHON_DEVEL m4模块中的操作。此模块可用于rpm脚本,以在基于autotools的构建的configure.ac阶段内合并python-devel的检查。

答案 1 :(得分:2)

Imho你的解决方案运作良好。

否则,更优雅"解决方案是使用像:

这样的小脚本

testimport.py

#!/usr/bin/env python2

import sys

try:
  __import__(sys.argv[1])
  print "Sucessfully import", sys.argv[1]
except:
  print "Error!"
  sys.exit(4)

sys.exit(0)

并使用testimport.sh distutils.sysconfig

调用它

如果需要,您可以对其进行调整以检查内部功能......

答案 2 :(得分:0)

对于那些寻求适用于python3的纯python解决方案的人:

python3 -c 'from distutils.sysconfig import get_makefile_filename as m; from os.path import isfile; import sys ; sys.exit(not isfile(m()))')

或作为文件脚本check-py-dev.py

from distutils.sysconfig import get_makefile_filename as m
from os.path import isfile 
import sys 
sys.exit(not isfile(m()))

要在bash中获取字符串,只需使用exit输出:

python3 check-py-dev.py && echo "Ok" || echo "Error: Python header files NOT found"