检查bash脚本是否存在Python开发文件
问题描述:
我正在创建一个简单的bash脚本来下载并安装一个python Nagios插件。在一些较旧的服务器上,脚本可能需要安装子进程模块,因此我需要确保安装了正确的python-devel文件。检查bash脚本是否存在Python开发文件
什么是检查这些文件的适当和跨平台的方法。想远离rpm或apt。
如果你能告诉我如何从python中检查可以工作的检查。谢谢!
更新:
这是我所想到的最好的。任何人都知道一个更好或更确定的方法?
if [ ! -e $(python -c 'from distutils.sysconfig import get_makefile_filename as m; print m()') ]; then echo "Sorry"; fi
答
这将是我将如何去做这件事。看起来很合理简单。
但是,如果我需要确定为当前版本的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
,rpm
和喜欢迎合变化更好。
如果您确实需要支持全部平台,可能值得探索在m4模块中所做的工作。该模块可用于configure.ac
脚本中,以在基于autotools的版本的./configure
阶段中包含对python-devel
的检查。
答
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称之为
你可以适应它检查内部功能,如果需要...
任何原因RPM不是您最喜欢的? – ajreal 2011-01-31 07:42:07
我需要确定发行版并运行rpm和dpkg(apt)等价物。所以如果可能的话我宁愿没有所有的代码。如果我可以在bash脚本中做一些“python -c import development-stuff”,并检查退出状态会更好。 – CarpeNoctem 2011-01-31 07:44:37