Проблема с подушкой Pypy 3.2

Я использую Ubuntu Server 14.04.

Я пытаюсь использовать pypy 3.2 для запуска приложения django.

Но всякий раз, когда я пробую pypy3 manage.py runserver 0: 8000, он говорит: (fields.E210) Невозможно использовать ImageField, потому что Pillow не установлен. СОВЕТ: получите подушку на https://pypi.python.org/pypi/Pillow или запустите команду "pip install Pillow".

Но если я попытаюсь установить подушку: pypy3 -m pip install Pillow

В нем говорится: Требование уже обновлено: Подушка в /usr/local/lib/python3.4/dist-packages/Pillow-2.9.0-py3.4-linux-x86_64.egg

Затем я загрузил исходный код и попробовал: pypy3 setup.py install

И там написано: Ошибка атрибута install_layout

Я не знаю, что делать !!

_<


person Renato Oliveira    schedule 04.07.2015    source источник


Ответы (1)


Вы должны создать правильный virtualenv с pypy3, поскольку ваш интерпретатор запускает вашу установку django - внутри virtualenv, pip должен работать как для django, так и для Pillow - без странных маневров, таких как pypy3 -m pip, которые могут сломаться, как и тот, который у вас есть.

Чтобы создать virtualenv, внутри которого интерпретатором Python по умолчанию является pypy3, просто выполните virtualenv -p pypy3 myprojectdir - и активируйте его с помощью source myprojectdir/bin/activate - для ленивых типов существует virtualenv wrapper, который создает еще больше ярлыков. С этого момента pip install в этот каталог будет устанавливаться все, что угодно, без нарушения (или проверки) ваших системных пакетов из любого другого Python.

Это способ иметь разумную среду - однако он видит, что вы просто пытаетесь выйти за рамки того, что доступно сейчас - в Интернете есть упоминания о совместимости Pillow с Pypy (и, конечно же, с python3) - но я не смог найти ни единого упоминания о запуске Pillow с pypy3.

Я могу заставить его собрать без ошибок, установив pypy3-devel в моей системе Linux и вручную установив переменную CFLAGS (здесь я использую Fedora - в Ubunut у вас должен быть пакет pypy3-dev). Но даже несмотря на то, что он строится, он не запускается на pypy, повышая ImportError: unable to load extension module 'PIL/_imaging.pypy3-24.so': PIL/_imaging.pypy3-24.so: undefined symbol: PyExc_SystemError; (В Fedora 22 я установил CFLAGS=-I/usr/lib64/pypy3-2.4.0/include/ проверьте ваш pypy3-dev пакет, чтобы узнать, где находятся эти включаемые файлы в Ubuntu).

TL; DR. Используйте pypy2.x или обычный cPython3.4 (конечно, это предпочтительно) для вашего проекта - в один прекрасный день зависимости наверстают упущенное. В любом случае Django не должен так сильно выигрывать от Pypy JIT - сильно загруженный веб-сервер должен будет иметь дело с масштабируемостью соединения с базой данных (не Python) и хорошим кешированием (которое также может быть правильно настроено на уровнях выше Python - взгляните на «лак "). Если у вас так много обработки запросов, которые ваш сайт получает из-за того, что не использует Pypy, рассмотрите возможность запуска алгоритмов узких мест в другом процессе с использованием сельдерея / RPC - и напишите эту часть программы для запуска с Pypy / Cython / pure C.

person jsbueno    schedule 04.07.2015
comment
Packaging.python.org/en/latest/ - person Mikko Ohtamaa; 04.07.2015
comment
Django наверняка потребует здесь много обработки. Но самое забавное в том, что я только что запустил сайт. Все, что у меня есть, - это базовый шаблон и шаблон нижнего колонтитула, который выполняет запрос и перебирает его содержимое, заполняя нижний колонтитул «последними 4 добавленными продуктами». Он не выдерживает 20req / s. % Обработки базы данных меньше 0,5%. И кажется, что простой доступ к странице временно занимает 10% обработки. Этого не происходит с php-страницей. Я делаю то же самое, запрашивая базу данных, а затем повторяю на веб-странице, отображающей контент. Я использую nginx с uwsgi. - person Renato Oliveira; 05.07.2015
comment
Улучшения: использование кеширования дало великолепные результаты! Позволяя мне иметь более 100 запросов в секунду и более !! Но мне все еще немного грустно из-за того, сколько обработки принимает django. знак равно - person Renato Oliveira; 05.07.2015