158

Интересный Python #11: упаковываем скрипты в .exe

Код программы, написанной на Python, хранится в файлах с расширением .py. Программист легко запустит такую программу с помощью интерпретатора.


Но как быть с не-программистами, которые привыкли запускать программы двойным кликом по значку и не готовы возиться с установкой интерпретатора ради запуска вашего скрипта? Как поделиться программой с друзьями или коллегами?

PyInstaller

С помощью библиотеки PyInstaller можно запаковать код на Python в исполняемый файл в расширением .exe. В этом файле будет содержаться всё необходимое для выполнения программы, включая интерпретатор и необходимые зависимости (внешние библиотеки).


Как установить PyInstaller

1. Откройте терминал (командную строку);

2. Если умеете пользоваться виртуальным окружением, то создайте и активируйте его. Если нет, то пропустите этот шаг;

3. Выполните команду pip install pyinstaller.


Документация

Документация понятная и актуальная. Ознакомиться с ней можно здесь.

Дальше в посте будет много скриншотов и примеров кода. Прочитать материал в более удобном и структурированном формате можно здесь.

Откройте командную строку и с помощью команды cd перейдите в каталог, в котором лежит ваш код (файл с расширением .py).

Выполните следующую команду: pyinstaller [filename].  filename - это имя модуля, то есть файла с кодом, например, main.py. Вы увидите, как pyinstaller начал свою работу.

В итоге будет создан файл с расширением .spec и 2 директории: build и dist. Перейдите в директорию dist. В ней вы увидите следующие файлы:

Запустите файл с расширением .exe (в примере выше это main.exe). Это и есть ваша программа в виде двоичного файла.

--onefile

Сейчас для того, чтобы поделиться программой с другими людьми, вам понадобится передать им всё содержимое каталога dist. Но если вы хотите, чтобы всё было упаковано в единый файл, то можно указать опцию --onefile: pyinstaller --onefile [filename].


Подключение дополнительных файлов

Иногда требуется добавить в дистрибутив не только саму программу, но и дополнительные файлы: данные, изображения и прочее. О том, как это сделать, можно прочитать здесь.

Возможно, вы также захотите прикрутить к своей программе полноценный установщик, вроде такого:

Для этого можно воспользоваться инструментами InstallForge или InnoSetup.

Программирование на python

936 постов11.9K подписчика

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Вы смотрите срез комментариев. Показать все
7
Автор поста оценил этот комментарий
Очень круто, но на деле почти никогда не работает, если ваш код не "привет мир"
раскрыть ветку (5)
4
Автор поста оценил этот комментарий
У меня на питоне был довольно крупный проект на pyqt, и вроде через pyinstaller прекрасно компилироваться
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Аналогично несколько скриптов довольно объемных паковал в exeшники, все норм)
1
Автор поста оценил этот комментарий

Вижу, что уже многие поддержали комментарии в духе "не работает со внешними библиотеками".


Решил проверить. Взял код отсюда: Прикладной Python: S1E2, парсим Пикабу . В зависимостях там BeautifulSoup, Selenium и Xlsxwriter. Специально взял проект с Селениумом, потому что там нужно будет бинарник от драйвера прицеплять, то есть это создаст ещё одну возможную точку отказа.


В соответствии с документацией прокинул PATH, так как использую виртуальное окружение, а pyinstaller выполняю из другой директории. Если всё делать из одной директории, то можно обойтись и без этого.


Прицепил к сборке бинарник chromedriver.exe для Selenium.


Итоговая команда: pyinstaller -p "D:\Ytyt\уроки\venv\lib\site-packages" --add-binary "D:\YtYt\Уроки\venv\chromedriver.exe;." main.py


Всё завелось с первой попытки (см. скриншот).


Возникает вопрос: господа, какие конкретно жуткие проекты вы там пытаетесь собрать, что с ними не заводится .exe, работающий по принципу "Взять интерпретатор, взять зависимости, собрать в кучу, запустить"? :)


Ладно бы речь шла про nuitka, там производится компиляция Сишного кода. Но тут же берётся интерпретатор Python, берутся зависимости и собираются вместе.

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ну может кто-то Django проект в exe файл упаковать хотел))

1
Автор поста оценил этот комментарий

#comment_244558130

Вот тут такой же вопрос поднимался. В каких ситуациях у вас не завелось?

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества