2011-05-06 22 views
11

Estoy tratando de ejecutar Django en alojamiento compartido (Bluehost). Estoy usando una funcionalidad que requiere PIL. PIL importa y funciona desde un shell interactivo, pero en mi proceso fcgi se bloquea con un MemoryError en la imagen de importación de PIL. Cualquier ayuda sobre por qué podría estar fallando dentro de fcgi sería muy apreciada.Python ctypes MemoryError en proceso fcgi desde la biblioteca PIL

__Environment Info__: 
Python2.7 

Local installs of libjpg, zlib, freetype, and lcms 

Virtualenv: 
Django 1.3, PIL, flup, etc. 

__Stack Trace__: 

    File ".../feincms_thumbnail.py", line 3, in <module> 
     from PIL import Image 

    File ".../PIL/Image.py", line 45, in <module> 
     \__import__("FixTk") 

    File ".../python2.7/lib-tk/FixTk.py", line 15, in <module> 
     import ctypes 

    File ".../python2.7/ctypes/__init__.py", line 549, in <module> 
     CFUNCTYPE(c_int)(lambda: None) 

__.fcgi__: 

<!-- language: python --> 
    # setup paths 
    # set DJANGO_SETTINGS_MODULE in os.environ 

    from django.core.servers.fastcgi import runfastcgi 
    runfastcgi(method="threaded", daemonize="false") 
+0

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=781578 – osa

Respuesta

23

he fijado temporalmente al comentar que el error de la última línea de este archivo $HOME/lib/python2.7/ctypes/__init__.py que es algo así como #CFUNCTYPE(c_int)(lambda: None).

Eso es trabajo para mí, pero no sé cuál es exactamente el problema.

ACTUALIZACIÓN

en Python 2.7.3 es el número de línea: 279 no el último, como he dicho anteriormente.

ACTUALIZACIÓN 2 Puesto que la línea puede variar entre versiones menores, usted debe buscar un trozo de código que se ve algo como esto:

# XXX for whatever reasons, creating the first instance of a callback 
# function is needed for the unittests on Win64 to succeed. This MAY 
# be a compiler bug, since the problem occurs only when _ctypes is 
# compiled with the MS SDK compiler. Or an uninitialized variable? 
CFUNCTYPE(c_int)(lambda: None) 
+0

Como un enfoque alternativo que había modificado Django para usar ImageMagick en lugar de PIL (https://github.com/psidebotham/Django-1.3-ImageMagick-Mod). Intentaré probar tu enfoque en el próximo día o dos para ver si me funciona. – Peter

+0

+1 - Hacky, pero funciona. ¿Este problema ha sido reportado? Error muy desagradable, espero que alguien esté trabajando en eso. – shacker

2

Sólo para ampliar la respuesta de eos87 un poco, esto hace También me solucionó el problema y, a juzgar por el comentario anterior a esa línea, parece que se agregó como una solución a un error de Windows, pero aparentemente la solución está causando problemas. Aquí está la parte al final de __init__.py:

# XXX for whatever reasons, creating the first instance of a callback 
# function is needed for the unittests on Win64 to succeed. This MAY 
# be a compiler bug, since the problem occurs only when _ctypes is 
# compiled with the MS SDK compiler. Or an uninitialized variable? 
CFUNCTYPE(c_int)(lambda: None) 

Parece que es seguro quitar.

FWIW, este problema apareció en una caja de Centos 5.7 x64 cuando se usaba Python 2.6 como instalado (en paralelo con python 2.4) desde epel. Se encontró que el archivo aquí: /usr/lib64/python2.6/ctypes/__init__.py

También tenga en cuenta que la excepción que se muestra es un MemoryError que según strace resultados de un fallo de segmentación inmediatamente (aunque tal vez por casualidad) después de una llamada a munmap; y solo aparece cuando se ejecuta como FastCGI.

+1

He resuelto esto un poco diferente - ver https://bugzilla.redhat.com/show_bug.cgi?id=717404 – Zart

2

intente ejecutar este comando:

setsebool -P httpd_tmp_exec on 

arregla las cosas para mí en CentOS. Tomado de este post: https://bugzilla.redhat.com/show_bug.cgi?id=645193

+0

Esto solo funcionaría, si en tu configuración, SELinux está habilitado. En otros casos, tendremos que confiar en las otras respuestas, supongo ... –

Cuestiones relacionadas