Вы должны создать правильный 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