2011-03-17 25 views
6

Tengo instalado el Python 2.7 en mi Linux Box, y estoy tratando de programar un script de Python a través de crontab. El script funciona bien desde la línea de comandos, sin embargo cuando se ejecuta a través de cron me sale:Problema al ejecutar Python desde crontab - "instalación de Python no válida"

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site.py", line 553, in <module> 
    main() 
    File "/usr/local/lib/python2.7/site.py", line 535, in main 
    known_paths = addusersitepackages(known_paths) 
    File "/usr/local/lib/python2.7/site.py", line 268, in addusersitepackages 
    user_site = getusersitepackages() 
    File "/usr/local/lib/python2.7/site.py", line 243, in getusersitepackages 
    user_base = getuserbase() # this will also set USER_BASE 
    File "/usr/local/lib/python2.7/site.py", line 233, in getuserbase 
    USER_BASE = get_config_var('userbase') 
    File "/usr/local/lib/python2.7/sysconfig.py", line 535, in get_config_var 
    return get_config_vars().get(name) 
    File "/usr/local/lib/python2.7/sysconfig.py", line 434, in get_config_vars 
    _init_posix(_CONFIG_VARS) 
    File "/usr/local/lib/python2.7/sysconfig.py", line 298, in _init_posix 
    raise IOError(msg) 
IOError: invalid Python installation: unable to open /usr/include/python2.7/pyconfig.h (No such file or directory) 

veo que existen /usr/include/python2.7 does't, pero /usr/local/include/python2.7/ hace. ¿Cometí un error al instalar Python?

+0

¿Qué distribución de Linux? –

+0

@Sridhar - Ubuntu – ripper234

+0

Esto no responde directamente a su pregunta, pero ¿ha probado ActivePython 2.7 - que se instala en /opt/ActivePython-2.7? –

Respuesta

2

Necesita python2.7-dev, que instala los incluye y los encabezados.

Para Ubuntu, ejecuta sudo apt-get install python2.7-dev para instalarlo. ¿Qué distribución de Linux estás ejecutando?

+1

Pero Python funciona muy bien desde el shell ... No tiene sentido que ejecutarlo desde crontab requeriría instalar algo más. – ripper234

+0

'/ usr/include/python2.7/pyconfig.h' es un archivo de encabezado C++. 'python2.7-dev' instala los archivos de encabezado y otras cosas que necesita para poder compilar cosas usando las bibliotecas de C++ de Python, que es lo que está haciendo su' crontab'. – Blender

+0

no es probable; El "sitio de importación" ocurre en el inicio de Python. Y aquí, algo extraño está sucediendo con el módulo sysconfig en el Python de Ubuntu./usr/local Python está leyendo/usr/'s include/dirs ... eso no está bien. –

3

Es probable que solo tenga 2 versiones instaladas, una de las cuales está rota. Si su cron se acaba llamando directamente python lugar de una ruta específica, su PATH probablemente contiene /usr/bin antes /usr/local/bin (lo cual es típico) - por lo que en el cron, especificar qué pitón de uso, o eliminar la existente en /usr/bin y enlace simbólico /path/to/good/python a /usr/bin/python .

Editar: rayar eso, simplemente volver a leer y ver que funciona bien desde la línea de comandos. python-dev es probablemente el camino a seguir. ¡Lo siento!

+0

'$ PATH' define dónde busca el sistema los binarios, pero no estoy seguro de si' python' puede revelar la ubicación de sus encabezados a través de su ejecutable binario ... – Blender

+0

Eso fue parte de mi error de lectura. Estaba diciendo que su cron probablemente estaba usando el binario python incorrecto porque el error era el primero en '$ PATH'. Al ver que funciona en la línea de comando no es válido. :) – mway

2

Supongo que en su archivo crontab, está dando la ruta completa al ejecutable python, y no solo confiando en she-bang con permisos ejecutables. Si no, por favor indique el camino completo python2.7 en el archivo crontab y también use el mismo camino completo en la línea de comando para asegurarse de no tener este problema. Si también lo obtiene en la línea de comando, entonces probablemente falten algunos encabezados de desarrollo. (¿Estás tratando de compilar algo así como usar setup.py build e intentar hacerlo a través de crontab?) Estoy tratando de entender dónde se necesitarían esos encabezados. Por lo tanto, aparte de la sugerencia anterior, la información adicional de su parte podría ayudar aún más.

Cuestiones relacionadas