Python ctypes MemoryError в процессе fcgi из библиотеки PIL - PullRequest
11 голосов
/ 06 мая 2011

Я пытаюсь запустить Django на виртуальном хостинге (Bluehost). Я использую функциональность, которая требует PIL. PIL импортирует и работает из интерактивной оболочки, но в моем процессе fcgi он завершается с ошибкой MemoryError из образа импорта PIL. Любая помощь по поводу того, почему он может не работать внутри fcgi, будет высоко оценена.

__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")

Ответы [ 3 ]

23 голосов
/ 08 июля 2011

Я временно исправил эту ошибку, комментируя последнюю строку в этом файле $HOME/lib/python2.7/ctypes/__init__.py, что-то вроде #CFUNCTYPE(c_int)(lambda: None).

Это работа для меня, но я не знаю, в чем именно проблема.

UPDATE

В python 2.7.3 номер строки: 279 не последний, как я сказал выше.

ОБНОВЛЕНИЕ 2 Поскольку строка может отличаться в разных версиях, вам следует искать фрагмент кода, который выглядит примерно так:

# 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)
3 голосов
/ 22 ноября 2012

попробуйте выполнить эту команду:

setsebool -P httpd_tmp_exec on

все исправляет для меня в CentOS. Взятые из этого поста: https://bugzilla.redhat.com/show_bug.cgi?id=645193

2 голосов
/ 05 октября 2011

Просто, чтобы немного расширить ответ eos87, это также решает проблему и для меня, и, судя по комментарию перед этой строкой, похоже, что он был добавлен в качестве обходного пути к ошибке Windows, но обходной путь, очевидно,вызывая проблемы самостоятельно.Вот бит в конце __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)

Похоже, что его безопасно удалить.

FWIW, эта проблема обнаружилась для меня на коробке Centos 5.7 x64 при использованииPython 2.6, установленный (параллельно с Python 2.4) из epel .Файл был найден здесь: /usr/lib64/python2.6/ctypes/__init__.py

Также обратите внимание, что исключение, которое появляется, является MemoryError, который согласно strace возникает из-за ошибки сегментации сразу (хотя, возможно, по совпадению) после вызова munmap;и он отображается только при запуске FastCGI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...