2011-01-31 21 views
9

Estoy creando un script bash simple para descargar e instalar un plugin Nagios de python. En algunos servidores más antiguos, el script puede necesitar instalar el módulo de subproceso y, como resultado, debo asegurarme de que estén instalados los archivos python-devel correctos.Verifique la existencia de archivos dev de Python desde el script bash

¿Cuál es un método apropiado y multiplataforma para verificar estos archivos? Me gustaría mantenerme alejado de rpm o apt.

Si me puede decir cómo hacer el cheque desde dentro de python que funcionaría. ¡Gracias!

Actualización:

Este es el mejor que he llegado con. ¿Alguien sabe un método mejor o más concluyente?

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

cualquier razón RPM no es tu favorito? – ajreal

+2

Necesitaría determinar la distribución y ejecutar rpm y el equivalente dpkg (apt). Entonces, si es posible, preferiría no tener todo ese código. Si puedo hacer algún tipo de "python -c import development-stuff" dentro del script bash y verificar el estado de salida que sería mejor. – CarpeNoctem

Respuesta

5

Eso sería más o menos cómo iba a hacerlo. Parece razonable simple.

Sin embargo, si necesito estar realmente seguro de que los archivos python-devel están instalados para la versión actual de Python, buscaría el archivo relevante Python.h. Algo a lo largo de las líneas de:

# 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 

Nota: distutils.sysconfig no sea compatible con todas las plataformas por lo que no es la solución más portátil, pero sigue siendo mejor que tratar de atender a las variaciones en apt, rpm y los gustos.

Si realmente necesita admitir todas las plataformas, podría valer la pena explorar lo que se hace en el módulo AX_PYTHON_DEVEL m4. Este módulo se puede utilizar en una secuencia de comandos configure.ac para incorporar comprobaciones para python-devel durante la etapa ./configure de una compilación basada en autotools.

+0

¡Gracias, modifiqué el script para incluir la parte de Python.h! – CarpeNoctem

+0

De nada. ¡Me alegro de que hayas encontrado la publicación útil! –

1

Imho your solutions funciona bien.

De lo contrario, una solución más "elegante" sería utilizar un pequeño script como:

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) 

y llamarlo con testimport.sh distutils.sysconfig

Usted puede adaptarlo para verificar la función interna si es necesario ...

Cuestiones relacionadas