python: компиляция проекта (PyCharm)
Подскажите, есть ли возможность компилировать (чтобы код быстрее работал) проекты. И если есть, то возможно ли это сделать через PyCharm?
Очень не хочется тратить время на переписывание кода на C++, но питоновский работает неприемлемо медленно (генерируется данные по времени и скорость генерации где-то 1 секунда за 1 минуту, а хотелось бы на порядок побыстрее)
Ответы (3 шт):
Можешь взглянуть в сторону Cython. Врядли PyCharm сможет тебе помочь.
А также для ускорения питона можешь использовать альтернативный интерпретатор - PyPy.
Этот вопрос не так прост, как нам всем хочется. Что означает ускорить? И на С можно написать убитую программу. Я недавно пишу на Питон. У меня проблем со скоростью НЕТ вообще. Хотя выполняется всё на ноуте 2012 года рождения. Да, у меня есть тяжёлые скрипты, которые выполняются пару часов. Но не они медленны, а dism, который выполняет операции с дистрибутивом ОС. В этом случае Питон просто играет роль батника. Криво написанному, непродуманному и неоптимизированному коду никакие компиляции не помогут.
Однако, существует вполне официальный способ компилировать скрипт в компилированный исполняемый код. Питон, выполняя программу, именно это и делает незаметно для нас. Выигрыш, естественно, мизерный, при этом пропускается фаза предварительной компиляции и проверки работоспособности скрипта. Создаётся такой себе бинарный вариант скрипта с расширением .pyc, который можно запускать непосредственно. Однако, это не автономная вещь всё равно. Питон должен быть проинсталлирован на компе для работы компилированного скрипта. В некоторых книгах даже рекомендуют использовать такой вариант как защиту от ковыряний в исходнике со стороны слишком грамотного пользователя - он запускает на исполнение .pyc в этом случае и всё. Вот способ использования:
import py_compile
py_compile.compile("my_script.py", "my_script.pyc")
Я это пробовал. Есть ещё более экзотичный вариант:
import compileall
compileall.compile_dir("your_directory")
Это я не пробовал, кому охота, играйтесь. Подробности здесь: https://docs.python.org/3/library/py_compile.html и здесь: https://docs.python.org/3/library/compileall.html#module-compileall
Хм, я тут подумал и понял, что и сам могу запускать для своих програм в режиме debug вариант .pyc. Ранее мне не нравилось, что компилированный скрипт суют в каталог __pycache__ и ещё какое-то дебильное имя ему дают. Теперь обнаружилось, что можно и имя выбрать, и каталог. Это уже интереснее, хотя и не принципиально в смысле "ускорения".
Хочу также отметить, что мне пока что ни разу не довелось встретиться с реально живой программой, написанной на Питоне и использующей только Питон, без взаимодействия с ОС типа рисования на экране, которая работала бы медленно. Прям настолько медленно, что уж терпеть невозможно. Уточняю, именно живую задачу не встречал. Конечно, можно нагрузить Питон триллионом операций, безусловно, но речь идёт о живой задаче. Перемолотить несколько миллионов чисел? Та не смешите, перемолотит почти мгновенно.
Компиляция и чтоб работало быстрее - это только cython.
Сначала проверьте что переменные не меняют свой тип. Например убрать нужно конструкции вроде
А=А[0]
Потом отделите логику в отдельный модуль.
Поставьте cython
pip install cython
И можно компилировать
cythonize -i -b mod.py
На выходе получится что-то вроде
mod.cython.py312-amd64.so
Этот модуль скомпилен в нативную библиотеку, загружается импортом как питоновский модуль.
Файл mod.py можно убрать из папки.
Чтоб работало ещё быстрее py переписать на pyx и функции в нем на cdef
Ах да. Это ускорит только тот код который в этом модуле. Сторонние библиотеки это не ускоряет.