Pull to refresh

Comments 31

И два способа, которые вы на самом деле хотите:

  • Nuitka

  • Cythonize

Pyinstaller не компилирует ваши py-файлы, а обычно именно это и надо.

Вы изучаете данные и хотите поделиться своим кодом Python с другими, не раскрывая исходный код

Ваш подход этого не дает. PyInstaller - это "SFX", он распаковывает из архива все Python-файлы в /tmp и запускает их.

UFO just landed and posted this here

Питоновский байткод довольно примитивен и если даже "скомпилирован", декомпилируется без особых проблем.

https://www.augmentedmind.de/2021/05/16/distribute-python-applications/

Из этого как по мне для скрытия кода Nuitka наиболее интересная, она транспилирует байткод в эквивалентный кода на Си.

По поводу библиотек не очень понял, та часть что на питоне - это обычный байткод, та что на Сях - нативный бинарник.

Хорошие компилятора, но, к сожалению, не работают для хоть сколько-нибудь сложных проектов.

Разумеется, можно написать свой код в "компилируемом" стиле, но тогда лучше сразу писать на rust/c/go.

У нас Nuitka дюжину сервисов собирает. Может быть и есть какие-то воркэраунды, но я по коду особо не вижу. Везде type hints используются.

Nuitka или Cythonize не требуют наличия .py, файлов в папке билда после сборки? Я имею в виду, что если у меня десктоп проект с 15 модулями, которые связаны импортами и подпроцессами, эти сборщики не вложат его в конечную папку "как есть"?

Это компиляция в нативный код через LLVM.

Не соглашусь. Pyinstsller может шифровать байткод ключом, его можно указать следующим образом: --key=<your_key_here>

А расшифровать как тогда для запуска? Ключ надо указывать? Ну он все в /tmp распакует и расшифрует. То есть, не поделившись ключем не запустить, а с ключем можно раскрыть код.

https://0xec.blogspot.com/2017/02/extracting-encrypted-pyinstaller.html?m=1

Или не хотите:


… и не требуя от них установки Python и других компонентов

Приходилось давать некоторые свои программы на Питоне коллегам-непрограммистам, коллегам-непитонистам или даже просто знакомым блондинкам — перечисленные в статье подходы замечательно работали для таких случаев, вопросы нераскрытия исходного кода вообще не волновали.


Дело давно было, ещё для Python 2.x — брал py2exe, он собирал всё в кучку, делал стартовый exe-файл, можно было запаковать в zip и отдать — распакуй, запусти, наслаждайся.


Ради интереса пробовал и нативные компиляторы, которые тогда были — ни один же не работал! В лучшем случае для них надо было всё переписать на некотором ограниченном подмножестве Питона, половина языка не поддерживается, две трети библиотек не поддерживаются — эдак проще выйдет самому с нуля на C++ написать. Подозреваю, что и сейчас примерно так же дело обстоит.

Спасибо! Надо изучить. Ещё CXFreeze тоже умеет

У него плохая поддержка внешних модулей и не-Linux систем

Благодарю. Тоже ищем решение.
Наша бизнес модель предусматривает хоститинг кода у клиента, в нашем docker image.
Беспокоимся о воровстве.

А ведь ещё есть Pyrex (правда, давно не обновлялся) и популярный в своё время py2exe (аналог PyInstaller по функциям).

Pyrex - это давно уже Cython, который регулярно обновляется.

Спасибо за информацию, приятно знать.

А ещë есть pyastra64, но это скорее jff проект, чем что-то очень полезное. Однако я вдоволь наигрался с этой штукой, написал примитивную консольку на питоне под 8086 <)

Мнение непопулярное, но если вам нужен исполняемый файл, то просто не используйте интерпретируемый язык программирования.

Если Nuitka дает возможность нативной компиляции, в чем ценность Вашего совета? Я бы понял, если бы аргумент был про производительность, но мнение не релевантно проблеме. И Python не интерпретируемый, а байт-код со своим рантаймом, к слову. Или Java тоже интерпретируемый в Вашей классификации?

Этот ваш "Байт-код со своим рантаймом" ничто иное, как интерпретатор компилирующего типа.

Да, Java тоже интерпретируемая.

ну так и процессор тоже интерпретатор получается. Он тоже принимает "байт-код" в машинных инструкциях. Ну и вот почитайте для общего развития про интерпретатор Java: https://en.wikipedia.org/wiki/Java_processor

Это жонглирование терминологией в попытках доказать непонятно что. Хочешь писать программы, у которых рантайм - это операционная система, выбирай языки, компилятор которых порождает бинарники под соответствующую операционную систему. Хочешь кроссплатформенный скрипт, ставь интерпретатор на ту машину, где он будет выполняться. Не нужно городить костыли в попытках применять технологии не по назначению только ради своего удобства и лени, индустрия и так уже низко скатилась.

Вы защищаете свою точку зрения, я свою. Так-то и эмулятор arm в qemu интерпретатор, да?

Вот как Wikipedia считает: https://ru.m.wikipedia.org/wiki/Интерпретатор

Вы, конечно, можете свои давать интерпретации процессу интерпретации, но, кажется, человечество не разделяет Вашу точку зрения.

Уверяю вас, индустрия сама себя починит, когда время придет. Не надо об этом переживать.

вы можете защитить свой код от изменения или кражи, облегчить другим людям использование вашей программы и сделать автоматическим выполнение задач.

Для защиты (от изменения, от утечки) скриптов на питоне использую pyarmor, исполняемый код шифруется, а при запуске или вызове функций разворачивается, можно сделать ограничение по времени, привязать к оборудованию

Вопрос к знатокам, а если нужно модуль на питоне скомпилировать в динамически подключаемую библиотеку, что использовать? Nuitka?

А без сертификатов на чужом компе этот экзешник мгновенно удалится антивирусом. А добавление иконки почему-то резко повышало хорошее к нему отношение.

pyinstaller его минус тянет все зависимости, у меня дипломная работа почти 500 мегов вышла, распаковка от 20 секунд до 40 на создание окна QT (еще и начальное окно не создает при указание без консоли, поэтому пользователь даже не догадывается что программа запустилась и тупит).
Пришлось делать загрузку из каталога.

Среди кучи комментариев так и не заметил cx_Freeze, который умеет .msi

А если скрипт с параметрами, куда их прописать?

Sign up to leave a comment.