nuitka.txt 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. Nuitka для компиляции grnMatrix.py на Linux. Инструкцию строго по одной строке, чтобы всё было максимально понятно.
  2. Предполагаю, что у тебя уже установлен Python (версия 3.x) и ты работаешь в терминале.
  3. Инструкция по компиляции grnMatrix.py с помощью Nuitka на Linux
  4. Открой терминал. Убедись, что у тебя установлен Python: python3 --version
  5. Установи компилятор GCC (нужен для Nuitka): sudo apt update
  6. Установи GCC, если его нет: sudo apt install gcc
  7. Проверь, что GCC установлен: gcc --version
  8. Установи менеджер пакетов pip, если его нет: sudo apt install python3-pip
  9. Проверь версию pip: pip3 --version
  10. Установи Nuitka через pip: pip3 install nuitka
  11. Проверь, что Nuitka установлена: nuitka --version
  12. Перейди в директорию, где лежит твой файл grnMatrix.py (замени /path/to/your/folder на свой путь): cd /path/to/your/folder
  13. Убедись, что файл grnMatrix.py там: ls grnMatrix.py
  14. Установи зависимости, если их ещё нет (в твоем случае нужна только curses, которая обычно встроена в Python на Linux):
  15. pip3 install -r requirements.txt
  16. (Если у тебя нет requirements.txt, пропусти этот шаг, так как curses стандартная библиотека.)
  17. Установи patchelf, который требуется для --standalone на Linux: sudo apt install patchelf
  18. Проверь, что patchelf установлен: patchelf --version
  19. Запусти компиляцию с Nuitka, создавая автономный исполняемый файл: nuitka --standalone --onefile grnMatrix.py
  20. Дождись завершения компиляции (это может занять 1-2 минуты, в терминале будут сообщения о процессе).
  21. Проверь, что файл появился (он будет называться grnMatrix): ls grnMatrix
  22. Дай файлу права на исполнение: chmod +x grnMatrix
  23. Запусти скомпилированный файл: ./grnMatrix
  24. Наблюдай анимацию "Matrix Rain" в терминале!
  25. Чтобы выйти из программы, нажми q или Q (как указано в коде).
  26. Ты уже можешь запустить grnMatrix.bin:
  27. Убедись, что у файла есть права на выполнение: chmod +x grnMatrix.bin
  28. Запусти: ./grnMatrix.bin
  29. Если всё работает, а место на диске хочется сэкономить, удали временные папки:
  30. rm -rf grnMatrix.build grnMatrix.dist grnMatrix.onefile-build
  31. Теперь у тебя останется только grnMatrix.bin и исходный grnMatrix.py.
  32. Примечания:
  33. Флаг --standalone включает все зависимости, а --onefile создает один файл вместо папки.
  34. Размер файла может быть около 5-15 МБ, что нормально для Nuitka.
  35. Убедись, что у тебя достаточно места на диске и прав для записи в текущей папке.
  36. Размер файла: du -h grnMatrix.py 12K
  37. Размер файла: du -h grnMatrix.bin 5.3M
  38. Разница в размерах между grnMatrix.py (12K) и grnMatrix.bin (5.3M) объясняется тем, как работает Nuitka и что именно включено в скомпилированный файл.
  39. Вот почему так происходит:
  40. grnMatrix.py (12K) Это просто исходный текстовый файл с твоим кодом на Python. Он содержит только сам скрипт — несколько строк логики для анимации "Matrix Rain"
  41. с использованием библиотеки curses. Его маленький размер — это просто текст без зависимостей или интерпретатора.
  42. grnMatrix.bin (5.3M) Это полноценный автономный исполняемый файл, созданный Nuitka с опциями --standalone и --onefile. Он включает:
  43. Скомпилированный код: Твой Python-код переведён в C и скомпилирован в машинный код.
  44. Интерпретатор Python: Nuitka встраивает части Python (например, стандартную библиотеку), чтобы программа могла работать без установленного Python на компьютере.
  45. Зависимости: Даже если ты явно используешь только curses (встроенная библиотека), Nuitka включает дополнительные модули Python и системные библиотеки,
  46. которые могут понадобиться.
  47. Сжатие: Хотя Nuitka сжимает данные (в твоём случае с 16.8M до 5.3M, как было в логах), итоговый размер всё равно больше исходного кода из-за всего встроенного.
  48. Почему такая разница?
  49. Исходный файл — это "рецепт", который требует Python и библиотек на твоей системе для работы.
  50. Скомпилированный файл — это "готовое блюдо", которое работает само по себе, но для этого в него "упаковали кухню" (интерпретатор и зависимости).
  51. Это нормально? Да, размер 5-15 МБ для автономного файла от Nuitka — типичное явление, особенно с --standalone.
  52. Если бы ты убрал эту опцию, размер был бы меньше, но тогда программа зависела бы от установленного Python и библиотек на машине.
  53. grnMatrixPy>time python3 grnMatrix.py
  54. real 0m1.773s
  55. user 0m0.465s
  56. sys 0m0.050s
  57. grnMatrixPy>time ./grnMatrix.bin
  58. real 0m2.430s
  59. user 0m0.827s
  60. sys 0m0.143s
  61. Краткое объяснение
  62. real: Общее время работы. У grnMatrix.py — 1.773 с, у grnMatrix.bin — 2.430 с. Python быстрее.
  63. user: Время CPU на код. У .py — 0.465 с, у .bin — 0.827 с. Python меньше нагружает CPU.
  64. sys: Время на системные вызовы. У .py — 0.050 с, у .bin — 0.143 с. Python меньше использует системные ресурсы.
  65. Краткий вывод
  66. grnMatrix.py (с Python) работает быстрее и потребляет меньше ресурсов, чем grnMatrix.bin.
  67. Скорее всего, из-за простоты скрипта компиляция в бинарник добавляет накладные расходы, которые не окупаются.
  68. Зачем создали Nuitka и бинарники?
  69. Автономность: Бинарник работает без Python и зависимостей на любой машине. Не надо ставить интерпретатор или библиотеки — это удобно для распространения софта.
  70. Защита кода: Исходник .py легко открыть и изменить, а бинарник сложнее разобрать. Это важно для коммерческих проектов.
  71. Потенциальная скорость: Для сложных программ с вычислениями (не анимаций) скомпилированный код может быть быстрее интерпретируемого Python.
  72. Nuitka убирает накладные расходы интерпретатора.
  73. Упаковка: Один файл проще раздавать, чем кучу .py с зависимостями.
  74. В данном случае бинарник — это как грузовик для перевозки пёрышка: можно, но велосипед (Python) справляется лучше.
  75. Если цель — просто запустить анимацию, .py хватает за глаза.