Как сделать исполняемый файл python mac

Обновлено: 08.07.2024

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

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

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

У меня есть ряд вопросов, связанных с этим: 1) я могу сделать это с ПК с Windows или мне нужен Mac? Я думаю, у меня должен быть доступ к Mac. 2) мой код будет работать на Mac без редактирования? А как насчет внешних библиотек? Знаете ли вы какой-нибудь простой способ скопировать / вставить мой «python с использованными библиотеками» из Windows в Mac? 3) я создам исполняемый файл так же, как Windows, я имею в виду, я буду использовать библиотеку типов "Pyinstaller"?

Спасибо заранее за вашу помощь.

2 ответа

1) могу ли я сделать это с ПК с Windows или мне нужен Mac? Думаю, мне нужен доступ к Mac.

Вы можете использовать виртуальную машину и строить для Mac.

2) будет ли мой код работать на Mac без редактирования? А как насчет внешних библиотек? Вы знаете какой-нибудь простой способ скопировать / вставить мой "питон с использованными библиотеками" с Windows на Mac?

Да, некоторые библиотеки ведут себя по-разному в macOS и Windows. Вам следует обратиться к документации по используемым библиотекам.

3) буду ли я создавать исполняемый файл так же, как Windows, то есть я буду использовать библиотеку типов «Pyinstaller»?

Если вы действительно используете pyinstaller , то он совместим как с Mac, так и с Windows. Вы должны убедиться, что используемая вами библиотека совместима с обоими, просмотрев их документацию.

Примером этого является использование изображения Mac virtualbox .

Установите виртуальный бокс (см. это)

Установите MacOS (см. это)

git clone ваш репозиторий

Настройте свою виртуальную среду (или просто pip install -r requirements.txt с файлом требований, но я сторонник venvs)

Примечание. Я знаю, что вы сказали pyinstaller - вроде бы, но у pyinstaller есть примечание о macos.

У тебя не должно быть никаких проблем. Просто убедитесь, что версия python такая же, так как я считаю, что по умолчанию для Mac это 2.7.

Кроме того, сценарии Python не компилируются, а скорее интерпретируются, поэтому создание исполняемого файла на самом деле не означает, что в данном случае это двоичный файл. Я не уверен, какой метод вы использовали для запуска python на компьютере, на котором нет python, как есть несколько, но если вам удастся сделать это на Windows, он должен работать на Mac.


Очень часто бывает необходимо собрать код, написанный на Python, в приложение для Windows, Linux или OS X. Да, для этого действительно существует множество пакетов, таких как кросс-платформенные cx_Freeze и PyInstaller, а также обособленных py2exe и py2app. Но для macOS существует возможность избежать возни с созданием установочного файла.

Нужно сказать, что в отличии от Windows, программа на MacOS это просто папка, с расширением .app а вот исталлятор имеет расширение .pkg.

Создаём программу


Для создания программы из скрипта, используем программу Platypus. Это бесплатная, open-source программа, распространяемая под BSD лицензией. Вот так выглядит единственное главное окно этой программы:

  • В поле App Name указываем имя приложения, это то как программа будет отображаться в списке программ и Launchpad-е.
  • В выпадающем списке Script Type указывается язык скрипта, в нашем случае это Python, можно указать путь к компилятору, если, например, на компьютере их несколько.
  • В поле Script Path можно создать свой новый скрипт (кнопка «+ New»), а можно выбрать уже готовый скрипт (кнопка «Select Script»).
  • В выпадающем списке Interface можно выбрать тип приложения, в случае если у вас консольное приложение, не требующее ввода текста пользователем, рекомендую выбрать Text Window.
  • Слева от вышеперечисленных полей, есть поле выбора иконки приложения, в составе программы идёт несколько стандартных иконок, но можно выбрать свою.
  • Следующий блок полей отвечает за информацию о программе, которая предоставляется в стандартном меню «О программе». Это уникальный идентификатор, автор программы и её версия. Кроме этого можно указать свойства для запуска, например запуск с правами администратора или работа в бэкграунде.
  • И второй по важности блок, это дополнительные файлы. Так как в MacOS приложение — это не только исполняемый файл, но и все необходимые для работы приложения файлы и папки. Нажатием на кнопку «+» можно выбрать как и отдельные файлы, так и целые папки.
  • После заполнения всех полей, кнопка «Create App» становится активной, нажимаем её и получаем на выходе симпатичный файлик с расширением .app.
Создаём инсталлятор

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


При открытии программы Packages нам предлагается выбрать тип установочного пакета, выбираем Distibution, так как Raw Package необходим тогда, когда нужно установить файлы в нестандартное расположение.


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


Пробежимся по ним:

  • Settings — первая вкладка, здесь можно задать имя приложения, рабочую директорию, а так же необходимые условия для установки.
  • Presentations — на этой вкладке устанавливается внешний вид самого пакета установки, добавляются переводы на различные языки, путь установки и прочие нюансы.
  • Requirements & Resources — необходимые условия для установки и зависимости. Например если для работы программы необходимо Xcode Command Line Tools, то здесь это можно указать, и если проверка не будет пройдена, то установка отмениться.
  • Comments — вкладка исключительно для заметок разработчика, представляет собой огромное поле для ввода текста.

Если в боковом меню выделить необходимый нам пакет(на картинке это My), то мы увидим следующую картину:


Во вкладке Settings, выбирается идентификатор, версия и можно указать, что попросить сделать пользователя после установки (выключить компьютер, перегрузиться и завершить сеанс пользователя). Кроме этого можно выбрать Location и дополнительные опции, например ввод админского пароля, изменение прав доступа к папке и прочее.

Во вкладке Payload происходит основной процесс, добавление файла приложения в проект. Необходимо выделить нужную папку для установки приложения, например Applications, нажать на кнопку «+» и выбрать уже готовый файл с расширением .app.


Во вкладке Scripts можно выбрать скрипты которые запустятся до или после установки.

После того как все пункты выполнены, нужно собрать проект. Это можно сделать либо из меню Build —> Build либо с помощью специальной короткой команды ⌘B.

После этого вы получите установочный файл, которым можете поделиться с вашими друзьями и партнёрами.

Ссылки на необходимые файлы и обучающее видео

Platypus — программа для сборки .app;

Packages — программа для сбоки pkg;

Вот это — отличная видеоинструкция по работе с программой Packages.

Небольшое дополнение

По умолчанию, Platypus просто запускает скрипт, но почти всегда нам надо запускать программу на компьютере, где не установлен python. Для такого случая есть специальный лайфхак:

В Platypus в качестве типа скрипта выбираете shell script, нажимаете на + и пишете следующий код:

  • MyApp.app — это имя вашего приложения
  • /compiler/bin/python — путь до компилятора
  • main.py — необходимый скрипт

Теперь, если вы соберёте программу и переместите её в папку Applications, то она запустится со своим компилятором.

Установка PyInstaller не отличается от установки любой другой библиотеки Python.

Вот так можно проверить версию PyInstaller.

Я использую PyInstaller версии 4.2.

Создание exe файла с помощью PyInstaller

PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:

  1. Считывает файл скрипта.
  2. Анализирует код для выявления всех зависимостей, необходимых для работы. spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
  3. Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
  4. Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
  5. Создает папку DIST в папке со скриптом, если она еще не существует.
  6. Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.

Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.

Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.

Создадим один исполняемый файл. В командной строке введите:

После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.

папки, BUILD и DIST, а также файл .spec

Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.

 исполняемый файл

Вот что произойдет после запуска файла.

Добавление файлов с данными

Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.

Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .

Добавление файлов с данными и параметр onefile

Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.

После успешного создания файл simple1.exe появится в папке DIST.

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

Добавление файлов с данными и параметр onefile

Дополнительные импорты с помощью Hidden Imports

Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …

Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.

Например, чтобы добавить библиотеку os, нужно написать вот так:

Файл spec

Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.

PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.

Файл с расширением .spec сохраняется по умолчанию в текущей директории.

Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:

  • Собрать в один бандл с исполняемым файлы данных.
  • Включить другие исполняемые файлы: .dll или .so.
  • С помощью библиотек собрать в один бандл несколько программы.

Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.

Компилируем модель с помощью PyInstaller:

После успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.

Исправим ее, обновив файл spec. Одно из решений — создать файл spec.

Команда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.

Поскольку был использован параметр --onefile , то внутри файла будет только раздел exe.

Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.

Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.

Создаем хуки и добавляем их в hidden imports и раздел данных.

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

Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.

Скомпилируем модель после обновления файла simpleModel.spec.

Скопируем исполняемый файл на рабочий стол и увидим, что теперь он корректно отображает версию TensorFlow.

Вывод:

PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:

Эй, ребята! В этом руководстве мы узнаем цель и основы Python Pyinstaller. Итак, давайте начнем!

Эй, ребята! В этом руководстве мы узнаем цель и основы Python Pyinstaller Отказ Итак, давайте начнем!

Что такое Pyinstaller?

Нам не нужно устанавливать разные пакеты или модули для различных приложений.

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

Он используется для создания файлов .exe для Windows, файлов .App для Mac и распределяемых пакетов для Linux.

Как установить Pyinstaller?

Мы можем скачать Pyinstaller из Pypi. Мы можем установить его, используя диспетчер пакетов PIP Package.

Рекомендуется создать виртуальную среду и установить там Pyinstaller.

Введите следующую команду в командной строке Windows

Теперь установите текущий каталог на местонахождение вашей программы Program.py Отказ

Запустите код, приведенный ниже. Здесь Program.py это название нашего данного сценария Python.

Pyinstaller анализирует наш код и делает следующее

  1. Создает Программа.spec Файл, который содержит информацию о файлах, которые должны быть упакованы.
  2. Создана папка сборки, которая содержит некоторые файлы журнала и рабочие файлы.
  3. Папка с именем Dist Также будет создано, в котором содержится .exe Файл с тем же именем, что и данный именем сценария Python.

Теперь есть 3 важных элемента использования Pyinstaller:

  • Файл .spec
  • Папка сборки
  • Dist папка

Что такое спецификация?

Модификация файла SPEC не требуется, кроме как в нескольких случаях, когда это полезно, когда мы хотим:

  1. Чтобы объединить наши файлы данных с приложением.
  2. Включить библиотеки времени выполнения, которые неизвестны Pyinstaller.
  3. Чтобы добавить варианты времени выполнения Python в исполняемый файл.
  4. Создать многопрограммурный пакет с объединенными общими модулями.

Чтобы создать SPEC-файл, запустите эту команду

Эта команда создает Program.py SPEC файл. Для создания приложения мы передаем файл SPEC в команду Pyinstaller:

Что такое папка сборки?

Папка сборки хранит метаданные и полезно для Отладка Отказ

Build/Program/Warn-Program.txt Файл в построить/ Папка содержит много выходов, чтобы лучше понять вещи.

Чтобы просмотреть вывод, восстановить исполняемый файл --Log-Level = Debug вариант. Рекомендуется сохранить этот вывод, чтобы обратиться к позже. Мы можем сделать это

Какая папка Dist?

Папка Dist содержит требования и исполняемые файлы для приложения. Он содержит файл .exe с тем же именем, что и наш скрипт.

Исполняемый для бега есть Dist/Program/Program.exe на окнах.

Что такое импортеррар?

Если Pyinstaller не может определить все зависимости правильно, ImportError Ошибка видна. Это происходит, когда мы используем __import __ () Отказ Импорт внутри функций или скрытых импорта.

Чтобы разрешить это мы используем, --hidden-import Отказ Эта команда включает в себя пакеты и модули автоматически.

Другой способ использует файлы крючков, которые содержат дополнительную информацию, которая помогает Pyinstaller Package UP в зависимости.

Как изменить имя нашего исполняемого файла с помощью Pyinstaller?

Чтобы избежать нашего спецификации, сборка и исполняемого файла имена как нашего имени сценариев Python, мы можем использовать -Нам команда.

Как создать один исполняемый файл?

Pyinstaller также может создать одно файловое приложение для нашего сценария Python. Он содержит архив всех модулей Python, требуемый нашей программой Python.

Чтобы создать только один исполняемый файл вашего сценария Python, запустите код, приведенный ниже-

Тестирование нашего исполняемого исполнения

Мы всегда должны проверять наш исполняемый файл в новой машине без какой-либо среды развития, как Виртуал , Кондей И т. Д. В качестве основной цели исполняемого исполнителя Pyinstaller заключается в том, что пользователь не должен потребовать какую-либо вещь, установленную на их системе.

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

Это потому, что «ImportLib_Resources» требует version.txt файл. Мы можем добавить этот файл по команде, приведенной ниже.

Это будет включать version.txt Файл в новой папке в ImportLib_Resources папка.

Заключение

В этой статье мы узнали, как установить Pyinstaller, Run, Debug и проверить наш исполняемый файл. Ждите продолжения!

Читайте также: