2011-01-31 16 views
9

Tworzę prosty skrypt bash, aby pobrać i zainstalować wtyczkę Python Nagios. Na niektórych starszych serwerach skrypt może wymagać zainstalowania modułu podprocesu, w wyniku czego muszę się upewnić, że zainstalowane są poprawne pliki python-devel.Sprawdź, czy istnieją pliki dev Pythona ze skryptu Bash

Co to jest odpowiednia i wieloplatformowa metoda sprawdzania tych plików. Chciałbym trzymać się z dala od rpm lub apt.

Jeśli możesz mi powiedzieć, jak to zrobić z poziomu Pythona, który zadziała. Dzięki!

Aktualizacja:

Jest to najlepszy mam wymyślić. Ktoś zna lepszą lub bardziej rozstrzygającą metodę?

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

jakikolwiek powód RPM nie jest Twoim ulubionym? – ajreal

+2

Musiałbym określić distro i uruchomić rpm i równoważnik dpkg (apt). Więc jeśli w ogóle to możliwe, wolałbym nie mieć całego tego kodu. Jeśli mogę po prostu zrobić coś w rodzaju "python -c import development-stuff" w skrypcie Basha i sprawdzić stan wyjścia, który byłby lepszy. – CarpeNoctem

Odpowiedz

5

To byłby prawie sposób, w jaki bym to zrobił. Wydaje się rozsądne proste.

Jednakże, jeśli chcę być naprawdę pewien, że pliki python-devel są zainstalowane dla bieżącej wersji Pythona, powinienem poszukać odpowiedniego pliku Python.h. Coś wzdłuż linii:

# 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 

Uwaga: distutils.sysconfig mogą nie być obsługiwane na wszystkich platformach, więc nie najbardziej przenośne rozwiązanie, ale jeszcze lepiej niż stara się zaspokoić wariacji w apt, rpm i lubi.

Jeśli naprawdę potrzebujesz wsparcia dla wszystkich platform, może warto przeanalizować, co się dzieje w module m4 AX_PYTHON_DEVEL. Ten moduł może być używany w skrypcie configure.ac w celu włączenia sprawdzania dla python-devel podczas etapu ./configure w kompilacji opartej na architekturze autotools.

+0

Dzięki, zmodyfikowałem skrypt tak, aby zawierał część Python.h! – CarpeNoctem

+0

Nie ma za co. Cieszę się, że znalazłeś post przydatny! –

1

IMHO swoimi rozwiązaniami działa dobrze.

Inaczej, bardziej "elegancki" rozwiązaniem byłoby wykorzystanie mały skrypt jak:

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) 

i wywołać ją z testimport.sh distutils.sysconfig

Ty może go zaadaptować, aby sprawdzić, czy funkcja wewnętrzna jest potrzebna ...

Powiązane problemy