检查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 
+0

任何原因RPM不是您最喜欢的? – ajreal 2011-01-31 07:42:07

+2

我需要确定发行版并运行rpm和dpkg(apt)等价物。所以如果可能的话我宁愿没有所有的代码。如果我可以在bash脚本中做一些“python -c import development-stuff”,并检查退出状态会更好。 – CarpeNoctem 2011-01-31 07:44:37

这将是我将如何去做这件事。看起来很合理简单。

但是,如果我需要确定为当前版本的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可能无法在所有平台上支持这样不是最便携的解决方案,但仍比试图aptrpm和喜欢迎合变化更好。

如果您确实需要支持全部平台,可能值得探索在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称之为

你可以适应它检查内部功能,如果需要...