python: компіляція проекту
Підкажіть, чи можна компілювати (щоб код швидше працював) проекти. І якщо є, то чи можливо це зробити через PyCharm? Дуже не хочеться витрачати час на переписування коду на C++, але пітонівський працює неприйнятно повільно (генерується дані за часом і швидкість генерації десь 1 секунда за 1 хвилину, а хотілося б на порядок швидше)
51k 18 18 золотих знаків 58 58 срібних знаків 102 102 бронзових знаків
Можливості компіляції у звичному значенні немає. Можна намагатися оптимізувати сам алгоритм, прикручувати jit, намагатися переписувати за допомогою cython.
Треба дивитися, що там генерується, що за дані. Можливо, для них уже написано бібліотеку для пітона на с++. А це зазвичай найкращий спосіб прискорити код на пітоні. Ну і звичайно мультипоточність, кешування, numba і т.д.
@ CrazyElf, можливо - генеруються випадкові числа по заданому дискретному розподілу, тобто. у мене є ПВР (граничний розподіл ймовірностей) і мені треба нагенерувати кілька мільйонів чисел по ньому, я використовую поки найповільніший з можливих способів (у циклі отримую 2 випадкові числа і якщо вони не задовольняють ПВР роблю ще раз цикл, зрозуміло що це дуже довго :()
@Zhihar А тут нічого потрібного немає? Хоча для цього треба знати, як називається потрібний розподіл docs.scipy.org/doc/scipy/reference/tutorial/stats/discrete.html
@Zhihar Ви краще поставте нове питання по суті - щодо ймовірностей і т.д. У нас же тут є як мінімум 2-3 особи, які дуже добре розуміються на статистиці, я думаю, вони розберуться, що ж вам потрібно. У статистичних пакетах, напевно, є все необхідне, просто потрібна людина, яка зіставить пакети з хотівками.А для цього потрібне правильне питання саме про статистику, в цей не факт, що вони заглянути. Статистичними пакетами все це миттєво робиться.
3 відповіді 3
Компіляція і щоб працювало швидше - це лише cython.
Спочатку перевірте, що змінні не змінюють свій тип. Наприклад прибрати потрібно конструкції на кшталт
Потім відокремте логіку в окремий модуль.
pip install cython
І можна компілювати
cythonize -i -b mod.py
На виході вийде щось на кшталт
mod.cython.py312-amd64.so
Цей модуль скомпілен у нативну бібліотеку, що завантажується імпортом як пітонівський модуль.
Файл mod.py можна забрати з папки.
Щоб працювало ще швидше py переписати на pyx і функції в ньому на cdef
Ах, так. Це прискорить тільки той код що у цьому модулі. Сторонні бібліотеки це прискорює.
51k 18 18 золотих знаків 58 58 срібних знаків 102 102 бронзових знаків
Можеш подивитись у бік 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")
Хм, я тут подумав і зрозумів, що й сам можу запускати для своїх програм у режимі debug варіант .pyc. Раніше мені не подобалося, що компільований скрипт сунуть у каталог __pycache__ і ще якесь дебільне ім'я йому дають. Тепер виявилося, що можна вибрати ім'я, і каталог. Це вже цікавіше, хоча й не важливо у сенсі "прискорення".
Хочу також зазначити, що мені поки що жодного разу не довелося зустрітися з реально живою програмою, написаною на Пітоні, яка використовує лише Пітон, без взаємодії з ОС типу малювання на екрані, яка працювала б повільно. Прям настільки повільно, що терпіти неможливо. Уточнюю, саме живого завдання не зустрічав. Звичайно, можна навантажити Пітон трильйоном операцій, безумовно, але йдеться про живе завдання. Перемолотити кілька мільйонів чисел? Та не смішіть, перемолотить майже миттєво.
Компіляція Python: що це та як її використовувати? 🔍🐍
Компіляція в Python: На відміну від деяких інших мов програмування, Python не є мовою, що компілюється.Натомість він є інтерпретованою мовою. Інтерпретація в Python відбувається рядково: коли інтерпретатор досягає рядка коду, він безпосередньо виконує відповідну операцію. Приклад:
Коли ви запустите цей код, інтерпретатор Python надрукує "Привіт мир!". Таким чином, однією з особливостей Python є здатність не вимагати попередньої компіляції перед виконанням коду.
Детальна відповідь
Компіляція Python: Що це та як це працює?
Python - популярна мова програмування, яка широко використовується для розробки різних програм, веб-сайтів та наукових досліджень. Коли ми говоримо про компіляцію Python, ми зазвичай маємо на увазі процес перетворення вихідного коду Python на машинний код, який може виконувати комп'ютер.
Виконання коду Python
У Python є два основні способи виконання коду: інтерпретація та компіляція. За промовчанням код Python інтерпретується. Це означає, що інтерпретатор Python читає та виконує кожен рядок вихідного коду по черзі. Однак існує можливість компілювати код Python перед його виконанням.
Компіляція Python коду
Коли відбувається компіляція Python коду, інтерпретатор Python перетворює вихідний код Python на проміжне уявлення, зване байт-кодом. Байт-код - це низькорівневе уявлення, схоже на машинний код, але все ще залежить від інтерпретатора Python. Він складається з інструкцій, які інтерпретатор може виконувати. Коли інтерпретатор виконує скомпільований код, він використовує вбудований віртуальний інтерпретатор Python (Python Virtual Machine, PVM) для виконання байт-коду. PVM є частиною стандартної бібліотеки Python і відповідає за інтерпретацію та виконання байт-коду.
Переваги компіляції Python
- Прискорення виконання: Компіляція Python коду може прискорити виконання, оскільки байт-код виконується швидше, ніж інтерпретація кожного рядка коду по черзі.
- Приховування вихідного коду: Оскільки скомпільований код представлений у вигляді байт-коду, який не зрозумілий для людини, він може приховати вихідний код від сторонніх очей.
- Підтримка безлічі платформ: Байт-код є платформно-незалежним, що означає, що ви можете скомпілювати та запустити код Python на різних операційних системах та архітектурах.
Приклад компіляції Python коду
Давайте розглянемо приклад компіляції Python коду:
# Це приклад простого Python коду def multiply(a, b): return a * b # Виклик функції result = multiply(5, 3) print(result)
У цьому прикладі ми визначаємо функцію multiply, яка приймає два аргументи та повертає їх добуток. Потім ми викликаємо цю функцію з аргументами 5 та 3 і виводимо результат.
Тепер скомпілюємо цей код, використовуючи утиліту py_compile :
import py_compile # Компілюємо код py_compile.compile('example.py')
Компіляція коду створить файл із розширенням .pyc, який містить байт-код нашого вихідного файлу Python. Тепер ми можемо виконати цей скомпільований код, використовуючи інтерпретатор Python:
Це простий приклад компіляції коду Python. Однак, у великих проектах часто використовуються інструменти, такі як pyinstaller або cx_Freeze , щоб створити повністю автономні виконувані файли з Python коду.
Висновок
Компіляція Python коду - це процес перетворення вихідного коду Python на байт-код, який може бути виконаний інтерпретатором Python. Компіляція може прискорити виконання коду, захистити вихідний код та забезпечити переносимість на різні платформи. Вона може бути здійснена за допомогою вбудованих інструментів чи сторонніх бібліотек.