Установка программы это компиляция exe файла
Не редко необходимые пакеты можно найти только в виде исходных текстов, в данной статье описывается метод установки пакета из исходных текстов.
Программы обычно распространяются в упакованных архивах, это файлы с расширениями
Нужно понимать отличие между архиватором и упаковщиком.
Для архивации директорий и файлов используется программа tar; результатом её работы является файл с расширением .tar. Грубо говоря, это копия файловой системы - директорий и файлов с их атрибутами и правами доступа, помещённая в один файл.
Данный файл по размеру будет чуть больше, чем суммарный размер файлов, которые были архивированы. Поэтому (а может и по другой причине) используют упаковщики - программы, которые позволяют уменьшить размер файла без потери данных.
Программа tar умеет распаковывать, поэтому не нужно вызывать gunzip, а можно просто указать программе tar, что файл нужно cначала распаковать. Например, команда
сразу распакует и разархивирует. Отличие файлов с расширениями
лишь в том, что использовались разные упаковщики, программа tar определяет метод сжатия автоматически и дополнительных опций в данном случае не требуется.
После распаковки необходимо перейти в полученный каталог, все описываемые ниже команды выполняются в каталоге с исходными текстами пакета.
Для сборки программ в GNU/Linux используется (в основном) программа make, которая запускает инструкции из Makefile, но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути,где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать Makefile. Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают Makefile. Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов …на этом они остановились
Для сборки нам нужны компиляторы: они прописаны в зависимостях пакета build-essential, так что достаточно установить его со всеми зависимостями. Ещё нужны autoconf и automake.
Итак, чтобы собрать что-то из исходников, нужно сначала собрать конфигуратор; как собрать конфигуратор, описано в файле configure.in. Для сборки конфигуратора необходимо выполнить
Если таких скриптов в архиве не оказалось, то можно выполнить последовательно следующие команды:
Все эти команды используют файл configure.in. После выполнения этих команд создастся файл configure. После этого необходимо запустить конфигуратор для проверки наличия всех зависимостей, а также установки дополнительных опций сборки (если возможно) и просмотра результата установки (опционально- может не быть)
Конфигуратор построит Makefile основываясь на полученных знаниях и файле makefile.am. Можно передать конфигуратору опции, предусмотренные в исходниках программы, которые позволяют включать/отключать те или иные возможности программы, обычно узнать о них можно командой
Также есть набор стандартных опций, вроде
, которая указывает, какой каталог использовать для установки. Для Ubuntu обычно
БЕЗ слеша в конце! Теперь можно запустить процесс сборки самой программы командой
Для сборки достаточно привелегий обычного пользователя. Окончанием сборки можно считать момент, когда команды в консоли перестанут «беспорядочно» выполняться и не будет слова error. Теперь всё скомпилировано и готово для установки.
Усилия потраченные на Правильную установку в последствии с лихвой окупятся в случае удаления или обновления устанавливаемого программного обеспечения.
Правильная установка(Вариант №1)
Установка при помощи утилиты checkinstall. Для установки выполните
Минус данного способа: checkinstall понимает не все исходники, поскольку автор программы может написать особые скрипты по установке и checkinstall их не поймёт.Для создания и установки deb-пакета необходимо выполнить
Правильная установка(Вариант №2)
Быстрое создание deb-пакета «вручную».
Основное отличие от предыдущего способа заключается в том, что в данном случае вы создаете пакет вручную и отслеживаете все вносимые изменения. Так же этот способ подойдет вам, если исходники не поддерживают сборку пакета с checkinstall. Производим установку во временную директорию, где получаем весь набор устанавливаемых файлов: Создадим в «корне пакета» директорию DEBIAN и сложим в DEBIAN/conffiles список всех файлов, которые должны попасть в /etc: После чего создаём файл DEBIAN/control следующего содержания: При необходимости там же можно создать скрипты preinst, postinst, prerm и postrm. Получаем на выходе tempinstall.deb, который и устанавливаемУстановка (вариант №3)
Процедура создания deb-пакета подробно описана в данной статье.
Неправильная установка
Минус данного способа заключается в том, что если вы устанавливаете напрямую через make install, то нормально удалить или обновить пакет вы, скорее всего, не сможете. Более того, установка новой версии поверх старой, скорее всего, затрёт ваши изменения в конфигах. make install делает ровно то, что ему сказано — производит установку файлов в нужные места, игнорируя тот факт, что там что-то уже есть. После этого процесса совершенно никакой информации о том, что и куда ставилось, получить в удобоваримом виде невозможно. Иногда, конечно, Makefile поддерживает действие uninstall, но это встречается не так часто, да и не факт, что корректно работает. Кроме того, вам будет необходимо хранить для деинсталяции распакованное дерево исходников и правил сборки.Для установки необходимо выполнить
Для удаления пакета, установленного данным способом необходимо выполнить в корневой директории исходников программы (там где вы запускали make install).
Пакеты с буквами mm в конце описания — это пакеты для C++ программ. Список для bmpx, но подойдёт почти для любой GTK2/Gnome программы. Так что если не получается собрать, то посмотрите на этот список и сверьте с тем что у вас установлено.
Наверняка, у каждого возникало непреодолимое желание, а иногда и реальная потребность, скомпилировать свой .py-файл в исполняемый .exe. Нынче в интернете можно найти множество подробных описаний данной процедуры, однако практически все они списаны слово в слово из не очень компетентного источника, поэтому в скором времени последователь этих методик заходит в тупик(испытано на себе).
Я же, имея некоторый опыт в этой области, намереваюсь расписать Вам рабочий рецепт компилирования .py в .exe, не забыв при этом упомянуть способы решения самых распространённых проблем сборки.Насколько мне известно, единственная утилита, которая может с более или менее устойчивым успехом компилировать приложения(и которой я уже почти год успешно пользуюсь) - это cx_Freeze . Найти её и скачать, я думаю, Вы сможете самостоятельно. И так - создаём в удобной директории папку dist в папке создаем файл setup.py :
from cx_Freeze import setup,Executable
import sys
и в эту же папку переносим основной файл main.py.
Открываем командную строку и запускаем компиляцию:
В итоге получим папку exe.win32-2.7, а вней запускающий наш скрипт файл main.exe
В указанную папку необходимо скопировать все графические и мультимедийные файлы относящиеся к нашей программе.
Если ошибки типа:
необходимо в файл с программой добавить импорт указанного модуля: import pygame._view
Если использовать py2exe организуем папку в которую помещаем файл с программой и файл setup.py:
from distutils.core import setup
import py2exe
Компиляция с командной строки python setup.py py2exe [enter]
Слёт кодировки:
Во-первых, при компилировании скриптов очень часто возникают проблемы с символьными данными, в частности, все русские буквы превращаются в, так называемые, кракозябры. Дабы зафиксировать этот баг, в начале каждого компилируемого скрипта прописывайте две команды:
До сих пор мне этот метод помогал, так что рекомендую его не просто так. Советую, кстати, писать эти строки во всех компилируемых скриптах. Обычно на компьютере программиста всё путём, а на клиентском иероглифы, так что лучше заранее подготовиться.
Потеря вложенных модулей:
Иногда получается, что при компилировании теряются вложенные модули, те самые, к которым нужно обращаться через точку. Проблема эта решается очень просто, нужно всего лишь импортировать каждый из вложенных модулей по отдельности, например:
Дело в том, что, работая в IDLE, Мы можем написать что-то, вроде:
Пронос файлов:
Если в Вашем приложении предусмотрено взаимодействие с графическим интерфейсом, а оно, скорее всего, так и есть, Вам может понадобиться несколько картинок или, к примеру, звуковых файлов. Не слушайте тех, кто говорит, что эти файлы нужно предварительно сериализовывать, упаковывать или что-то в этом роде. На самом деле, Вам нужно просто взять эти файлы и скопировать в папку с уже скомпилированным файлом .exe. Например, в моём скрипте встречается такая строка:
Вот я беру, компилирую файл, открываю каталог, в котором он находится, создаю папку icons и добавляю туда файл pa.jpg . Этого будет достаточно.
Иконка для .exe:
Это достаточно интересная и очень простая часть. Для того, чтобы прицепить к своему .exe-файлу иконку, в конце файла setup.py нужно прописать соответствующую команду:
Основным здесь является, естественно, параметр icon, обращаться с которым не так уж трудно.
Прокат сторонних модулей:
Вот с этим пунктом у программистов всегда возникают проблемы. До сих пор я не видел рабочего метода разрешения ситуации, поэтому нашёл его сам. Решение просто элементарно. Как и в случае с картинками, Вам требуется всего лишь скопировать сторонний модуль в папку с .exe-файлом. Проверено на виртуальной оси и на компьютере знакомого: оба не имеют интерпретатора Python . Прокатывал пакет Pmw - взял всю папку python33/Lib/Pmw .
В этом, кстати, нет ничего удивительного, ведь, как я сказал выше, cx_Freeze шьёт весь интерпретатор Python , который в состоянии выполнить некомпилированный Python -код. Заметьте, что модули останутся открытыми, а это значит, что любой злоумышленник, знающий синтаксис Python , вполне может модифицировать сторонний модуль в своих злобных целях.
Отсутствующие dll:
Это ещё одна возможная проблема. Бывает, при запуске пользователь получает окно с надписью: "MSVCR100.dll отсутствует, попробуйте переустановить программу." или что-то в этом роде. Чтобы решить эту проблему, клиенту нужно установить MS Visual Studio, обычно 2010. Разумно поставлять установочный файл данной утилиты в одной упаковке со своим приложением.
Конечно, подобная компиляция далека от идеала и не всегда получается с первого раза скомпилировать работающий скрипт, чтобы он работал в режиме «для пользователя». Компилируя одну из своих первых программ для «широких масс», я столкнулся со следующей ошибкой при запуске моей скомпилированной программы:
Второй вариант (на будущее) — скорректировать скрипт и прописать в нём отсутствующий модуль, чтобы он сразу же подтянулся при компилировании:
Я думаю, если у Вас возникла подобная проблема, то более подробно рассказывать о том, как компилировать с помощью cx_Freeze у меня уже нет необходимости
Сборка установочного файла:
С этого, пожалуй, нужно было начинать. Для удобства переноса/передачи скомпилированное приложение можно сразу замешать в .msi-файл. Это стандартный установочный файл Windows, который при запуске предложит пользователю выбрать каталог установки и распакует туда все данные. По-прежнему, это не даёт возможности собрать всё приложение в один .exe файл(если честно, я даже не знаю, зачем это нужно). Сделать .msi-файл можно, запустив в консоли команду:
Так же, как build. Собранный файл можно найти в каталоге dist , который появится в первом dist , то есть python33/Script/dist/dist .
На этом, пожалуй, всё. Если что-то у Вас не получается, пишите в комментах, всё-таки, cx_Freeze - утилита нежная, да и я мог где-нибудь в записи ошибиться.
Мне не понравился ваш "пронос" файлов, а что будете делать при сборке msi? Просить пользователей добавлять картинки в установочную папку? Почему не хотите сделать так:
Установка PyInstaller не отличается от установки любой другой библиотеки Python.
Вот так можно проверить версию PyInstaller.
Я использую PyInstaller версии 4.2.
Создание exe файла с помощью PyInstaller
PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:
- Считывает файл скрипта.
- Анализирует код для выявления всех зависимостей, необходимых для работы. spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
- Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
- Создает папку DIST в папке со скриптом, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.
Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.
Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.
Создадим один исполняемый файл. В командной строке введите:
После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.
Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.
Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .
Добавление файлов с данными и параметр onefile
Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.
После успешного создания файл simple1.exe появится в папке DIST.
Можно скопировать исполняемый файл на рабочий стол и запустить, чтобы убедиться, что нет никакой ошибки, связанной с отсутствием файла.
Дополнительные импорты с помощью 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-скриптов:
Или вы можете пофантазировать и вместо этого создать установщик EXE.
В этом посте мы рассмотрим три различных способа создания EXE: самораспаковывающийся пакет, простой установщик с использованием встроенного IExpress и расширенный установщик с помощью настраиваемой Inno Setup.
1. Создайте быстрый EXE-файл с помощью 7-Zip.
Вероятно, вы уже используете 7-Zip для извлечения всех видов архивных файлов и знаете, что 7-Zip может создавать архивные файлы, но знаете ли вы, что вы также можете использовать его для создания EXE-файла, который действует как установщик?
Он называется SFX-архивом (самораспаковывающимся) и работает, сжимая все ваши конечные файлы вместе, а затем встраивая в архив специальный EXE-файл, который знает, как все распаковать.
Другими словами, получатель может извлечь SFX-архив (который выглядит как EXE-файл), даже если у него нет нужного программного обеспечения, что может случиться с такими форматами, как 7Z, RAR, TAR и ZIP.
Вот как создать SFX-архив с помощью 7-Zip:
Обратите внимание, что SFX-архивы не являются настоящими файлами установщика. Они не помещают извлеченные файлы в назначенный целевой каталог. Они не изменяют реестр Windows. Кроме того, они не создают журналы установки и не отображаются как установленное программное обеспечение в приложении «Удалить». Это буквально архивные файлы, оформленные как EXE-файлы.
2. Как использовать IExpress для простого создания EXE
Как и 7-Zip, описанный выше, этот метод создает самораспаковывающийся архив, но с двумя основными отличиями: во-первых, конечный пользователь будет проходить через многостраничный мастер установки, а во-вторых, конечный пользователь может указать целевой каталог для куда инструмент извлечет файлы.
И вот как вы создаете свой установщик EXE с помощью IExpress:
Ваш пакет будет создан через несколько минут. Обратите внимание, что у IExpress есть некоторые особенности и проблемы:
Из-за этих странностей мы рекомендуем вместо этого использовать метод, описанный ниже.
Связанный: Что такое GUI (графический интерфейс пользователя)?
3. Лучший способ создать EXE: используйте Inno Setup.
Теперь выполните следующие действия, указанные ниже:
На странице настроек компилятора вы можете настроить EXE-файл установщика:
После настройки параметров нажмите Готово. Когда будет предложено скомпилировать новый сценарий, нажмите Да. Когда будет предложено сохранить сценарий, выберите Нет, если это одноразовый файл установщика. Выберите Да, если вы планируете изменить или обновить его позже.
Подождите, пока процесс завершится, и вуаля, у вас будет с собой исполняемый файл.
Какой метод лучше всего подходит для создания установщика EXE?
Если у вас базовое программное обеспечение или вы собираетесь распространять его среди ограниченного числа людей, используйте метод 7-Zip. Это просто, быстро и практически не требует технических знаний.
Если ваше программное обеспечение несколько простое, и вы хотите предоставить конечным пользователям настоящий мастер установки, воспользуйтесь методом IExpress. Наконец, выберите приложение Inno, если у вас сложное программное обеспечение и вы знаете, что делаете.
Читайте также: