2011-01-31 12 views
9

Sto creando un semplice script bash per scaricare e installare un plug-in Python Nagios. Su alcuni server meno recenti lo script potrebbe dover installare il modulo subprocess e, di conseguenza, è necessario assicurarsi che siano installati i file python-devel corretti.Verifica esistenza di file dev Python da script bash

Che cos'è un metodo appropriato e multipiattaforma per il controllo di questi file. Vorrebbe stare lontano da rpm o apt.

Se puoi dirmi come eseguire il controllo all'interno di python che funzionerebbe. Grazie!

Aggiornamento:

Questo è il migliore che ho messo a punto. Qualcuno conosce un metodo migliore o più conclusivo?

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

qualsiasi motivo RPM non è il tuo preferito? – ajreal

+2

Avrei bisogno di determinare la distribuzione ed eseguire rpm e l'equivalente dpkg (apt). Quindi, se possibile, preferirei non avere tutto quel codice. Se posso semplicemente fare una sorta di "python -c import development stuff" all'interno dello script di bash e controllare lo stato di uscita che sarebbe meglio. – CarpeNoctem

risposta

5

Sarebbe più o meno come vorrei andare a farlo. Sembra ragionevole semplice.

Tuttavia, se devo essere veramente sicuro che i file python-devel siano installati per la versione corrente di Python, cercherò il file Python.h pertinente. Qualcosa sulla falsariga di:

# 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 non può essere supportato su tutte le piattaforme in modo non la soluzione più portatile, ma ancora meglio che cercare di soddisfare variazioni apt, rpm e simili.

Se è davvero necessario supportare tutte le piattaforme, potrebbe valere la pena esplorare ciò che viene fatto nel modulo AX_PYTHON_DEVEL m4. Questo modulo può essere utilizzato in uno script configure.ac per incorporare i controlli per python-devel durante la fase ./configure di una build basata su autotools.

+0

Grazie, ho modificato lo script per includere la porzione Python.h! – CarpeNoctem

+0

Prego. Sono contento che tu abbia trovato utile il post! –

1

Imho le tue soluzioni funzionano bene.

In caso contrario, una soluzione più "elegante" sarebbe quella di utilizzare uno script piccolo come:

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) 

e chiamarlo con testimport.sh distutils.sysconfig

È può adattarlo per verificare la funzione interna, se necessario ...