Cython для приложения Django: будет ли это работать?
Собирался бы с использованием cython с python 3.4 Django app, или он мог бы работать без огромных усилий?
Этот ответ - qaru.site/info/8265/... - на вопрос о защите кода на Python я попросил задать этот вопрос.
Аналогичный вопрос задавался ранее, но в отношении повышения производительности: Использование Cython с Django. Это имеет смысл?
Ответы
Ответ 1
Да, мы сделали это. Но это точка постоянной боли.
Мы производим коммерческий продукт, который устанавливается у клиента для управления его контакт-центром Genesys. Ядро приложения написано на Django, и мы хотели защитить (ограничить) код от проверки.
Скорость работы в родном Python улучшена, но это не является значительной разницей. Улучшение зависит от типа задачи, иногда до 30%, иногда минимально.
Время от времени мы сталкиваемся с проблемами, когда что-то работает в Python, но не в Cython. Я не рекомендовал бы этот путь, если у вас нет действительно хорошей мотивации.
В настоящее время версия работает на Python 3.5 с Django 1.11
Ответ 2
Я знаю, что слишком поздно, чтобы ответить. Хотя это может помочь.
Я создал файл setup.py в домашнем каталоге проекта.
from distutils.core import setup
from Cython.Build import cythonize
fileSet = set()
fileSet.add("app1/file1.py")
fileSet.add("app2/file2.py")
fileSet.add("app3/file3.py")
setup(
ext_modules=cythonize(fileSet)
)
Сканирование каталогов приложений и добавление файлов в файл. Установите все, что вы хотите скомпилировать. file1.py, file2.py и file3.py - только примеры.
Наконец, просто запустите файл setup.py, как показано ниже
python setup.py build_ext --inplace
Затем статистика Cython компилирует каждый файл и делает его .so файлом.
Пример: app1/file1.so app2/file2.so app3/file3.so
Эти файлы являются общими объектными файлами, и вы не можете интерпретировать их вручную.
Удалите все файлы .py и .pyc. А затем запустите свой проект как
python manage.py runserver
или вы можете разместить эти двоичные файлы на своем рабочем сервере. Я попробовал NGINX, UWSGI.
Удачи.