我正在创建一个简单的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
答案 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"