Перейти к содержимому

Как сделать установщик программы на python

  • автор:

Можно ли создать установщик для python программы?

Можно ли сделать готовую программу с установщиком и если можно какие есть инструменты для создания установщика?

Отслеживать
задан 4 ноя 2019 в 15:45
657 8 8 серебряных знаков 27 27 бронзовых знаков

Компиляция не имеет никакого отношения к запуску без установки python. Даже скомпилированные на C++ программы требуют устанавливать стандартную библиотеку и какой-нибудь vcredist правильной версии.

4 ноя 2019 в 15:51

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

4 ноя 2019 в 15:53
nuitka, pyinstaller, py2exe
4 ноя 2019 в 15:58
cx_freeze ещё есть
4 ноя 2019 в 22:36

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Если нужен именно установщик под Windows аля setup.exe то сначала pyinstaller для генерации всех нативных dll и exe , а затем nsis для создания установщика. В результате получится setup.exe с вашей программой, который при нужных настройках установит программу в нужный каталог, создаст ключи в реестре, сделает ярлыки, создаст uninstall.exe и много чего еще.

Отслеживать
user399117
ответ дан 13 ноя 2019 в 8:16
Константин Рыбаков Константин Рыбаков
512 2 2 серебряных знака 10 10 бронзовых знаков

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как сделать установщик программы на python

Для создания программ на Python нам потребуется интерпретатор. Для его установки перейдем на страницу https://www.python.org/downloads/ и найдем ссылку на загрузку последней версии языка:

Установка Python

По нажатию на кнопку будет загружен соответствующей текущей ОС установщик Python. Следует учитывать, что Windows 7 и более ранние версии не поддерживаются.

На ОС Windows при запуске инсталлятора запускает окно мастера установки:

Установка дистрибутива Python 3.11 на Windows

Здесь мы можем задать путь, по которому будет устанавливаться интерпретатор. Оставим его по умолчанию, то есть C:\Users\[имя_пользователя]\AppData\Local\Programs\Python\Python312\ .

Кроме того, в самом низу отметим флажок «Add Python 3.12 to PATH», чтобы добавить путь к интерпретатору в переменные среды.

После этого мы можем проверить установку Python и его версию, запустив в командной строке/треминале команду

python --version

Запуск интерпретатора

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

Как было сказано в прошлой теме, программа интерпретатора, если при установке не был изменен адрес, по умолчанию устанавливается на Linux по пути usr/local/bin/python311 , а на Windows по пути C:\Users\[имя_пользователя]\AppData\Local\Programs\Python\Python311\ и представляет файл под названием python.exe .

Интерпретатор Python

Запустим интерпретатор и введем в него следующую строку:

print("hello world")

И консоль выведет строку «hello world»:

Python 3.12.0 (tags/v3.12.0:0fb18b0, Oct 2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print("hello world") hello world >>>

Для этой программы использовалась функция print() , которая выводит некоторую строку на консоль.

Создание файла программы

В реальности, как правило, программы определяются во внешних файлах-скриптах и затем передаются интерпретатору на выполнение. Поэтому создадим файл программы. Для этого на диске C или где-нибудь в другом месте файловой системы определим для скриптов папку python . А в этой папке создадим новый текстовый файл, который назовем hello.py . По умолчанию файлы с кодом на языке Python, как правило, имеют расширение py .

Создание скрипта на языке Python

Откроем этот файл в любом текстовом редакторе и добавим в него следующий код:

name = input("Введите имя: ") print("Привет,", name)

Python в Visual Studio Code

Скрипт состоит из двух строк. Первая строка с помощью функции input() ожидает ввода пользователем своего имени. Введенное имя затем попадает в переменную name .

Вторая строка с помощью функции print() выводит приветствие вместе с введенным именем.

Теперь запустим командную строку/терминал и с помощью команды cd перейдем к папке, где находится файл с исходным кодом hello.py (например, в моем случае это папка C:\python).

cd c:\python

Далее вначале введем полный путь к интерпретатору, а затем полный путь к файлу скрипта. К примеру, в моем случае в консоль надо будет вести:

C:\Users\eugen\AppData\Local\Programs\Python\Python312\python.exe hello.py

Но если при установке была указана опция «Add Python 3.12 to PATH» , то есть путь к интерпретатору Python был добавлен в переменные среды, то вместо полного пути к интерпретатору можно просто написать python:

python hello.py

Либо даже можно сократить:

py hello.py

Варианты с обоими способами запуска:

Microsoft Windows [Version 10.0.22621.2361] (c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены. C:\Users\eugen>cd c:\python c:\python>C:\Users\eugen\AppData\Local\Programs\Python\Python312\python.exe hello.py Введите имя: Eugene Привет, Eugene c:\python>python hello.py Введите имя: Tom Привет, Tom c:\python>py hello.py Введите имя: Bob Привет, Bob c:\python>

В итоге программа выведет приглашение к вводу имени, а затем приветствие.

Краткое руководство. Создание первого веб-приложения Python с помощью Visual Studio

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

В рамках этого краткого (на 5–10 минут) знакомства с Visual Studio в качестве IDE для Python создается простое веб-приложение Python на платформе Flask. Вы создадите проект при помощи дискретных действий, которые помогут ознакомиться с базовыми функциями Visual Studio.

Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. В установщике выберите рабочую нагрузку Разработка на Python.

Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. В Visual Studio Installer выберите рабочую нагрузку Разработка на Python, а в сведениях об установке — Веб-поддержка в Python.

Screenshot of the Visual Studio Installer with the Python development workload and Python web support selected.

Создание проекта

Ниже приведены инструкции по созданию пустого проекта, который служит контейнером для приложения:

  1. Откройте Visual Studio 2019.
  2. На начальном экране выберите Создать новый проект.
  3. В диалоговом окне Создать новый проект введите «Python веб» в поле поиска вверху, выберите Веб-проект в среднем списке и нажмите Далее: Create a new project screen with Python Web Project selectedЕсли вы не видите шаблоны проектов Python, запустите установщик Visual Studio, выберите «Дополнительно>изменить«, выберите рабочую нагрузку разработки Python, а затем нажмите кнопку «Изменить«.Python development workload in the Visual Studio installer
  4. В следующем диалоговом окне Настроить новый проект введите HelloPython в качестве имени проекта, укажите расположение и выберите Создать. (Имя решения автоматически устанавливается в соответствии с именем проекта.) Configure your new project dialog
  5. Новый проект откроется в обозревателе решений в правой области. Проект пока пуст, так как он не содержит других файлов. Sreenshot showing the newly created empty project in the Solution Explorer.
  1. Откройте Visual Studio 2022.
  2. На начальном экране выберите Создать новый проект.
  3. В диалоговом окне Создание проекта введите «Python web» в поле поиска вверху. Выберите Веб-проект из списка, а затем нажмите Далее: Screenshot showing the Create a new project screen with Python Web Project selected.Если вы не видите шаблоны веб-проекта Python, выберите пункт Средства>Get Tools and Features (Получить средства и компоненты), чтобы запустить Visual Studio Installer. В Installer выберите рабочую нагрузку Разработка на Python, а в разделе Сведения об установке щелкните Веб-поддержка в Python. Затем нажмите кнопку Изменить.
  4. В диалоговом окне Настроить новый проект введите «HelloPython» в качестве имени проекта, укажите расположение, а затем выберите Создать. Поле Имя решения автоматически обновится в соответствии с именем проекта. Screenshot showing the Configure your new project dialog.

Новый проект откроется в обозревателе решений в правой области. Проект пока пуст, так как он не содержит других файлов.

Screenshot showing the Solution Explorer with the newly created empty project.

Вопрос. В чем преимущество создания проекта в Visual Studio для приложений Python?

Ответ. Приложения Python обычно определяются только с помощью папок и файлов, однако такая простая структура может стать утомительной по мере увеличения размеров приложений. Приложения могут содержать автоматически созданные файлы, JavaScript для веб-приложений и другие компоненты. Проект Visual Studio помогает управлять этими сложными моментами.

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

Вопрос. Что представляет собой «решение», которое отображается в обозревателе решений?

Ответ. Решение Visual Studio — это контейнер, который помогает управлять одним или несколькими связанными проектами в виде группы. В решении хранятся параметры конфигурации, которые не относятся к конкретному проекту. Проекты в решении также могут ссылаться друг на друга. Например, при запуске проекта приложения Python может автоматически создаваться второй проект, например расширение C++, используемое приложением Python.

Установка библиотеки Flask

Веб-приложения на Python почти всегда используют одну из множества доступных библиотек Python для обработки низкоуровневых процессов, таких как маршрутизация веб-запросов и формирование ответов. Visual Studio предоставляет множество шаблонов для веб-приложений. Позже в этом кратком руководстве вы используете один из этих шаблонов.

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

  1. Разверните в проекте узел Окружения Python, чтобы увидеть среду по умолчанию для проекта. Solution explorer showing the default environment
  2. Щелкните правой кнопкой мыши среду и выберите пункт «Управление пакетами Python. «. Эта команда открывает окно «Среды Python» на вкладке «Пакеты» (PyPI).
  3. В поле поиска введите «flask». Если Flask отображается под полем поиска, этот шаг можно пропустить. В противном случае выберите Запустить команду: pip install flask. Подтвердите запросы на права администратора и наблюдайте за ходом выполнения в окне Вывод в Visual Studio. (Запрос на повышение прав выводится в том случае, если папка пакетов для глобальной среды находится в защищенной области, такой как C:\Program Files.) Installing the Flask library using pip install
  1. Разверните в проекте узел Окружения Python, чтобы увидеть среду по умолчанию для проекта. Screenshot showing the default environment in Solution Explorer.
  2. Щелкните окружение правой кнопкой мыши и выберите Открыть пакеты Python. Эта команда открывает вкладку Пакеты (PyPI) в окне Окружения Python.
  3. В поле поиска введите «flask». Если Flask отображается под полем поиска, этот шаг можно пропустить. В противном случае выберите Выполнить команду: pip install flask. Screenshot that shows installing the Flask library using pip install.Запрос на повышение прав отображается, если папка пакетов глобального окружения находится в защищенной области, например в папке C:\Program Files. Подтвердите запросы на права администратора. Следите за ходом выполнения в окне Вывод в Visual Studio.

После установки библиотека появится в среде в Обозревателе решений. Это означает, что ее можно использовать в коде Python.

Flask library installed and showing in Solution Explorer

Screenshot that shows the Flask library installed and showing in Solution Explorer.

Вместо установки библиотек в глобальном окружении разработчики обычно создают «виртуальное окружение», в котором устанавливаются библиотеки для определенного проекта. Шаблоны Visual Studio обычно обеспечивают такую возможность, как описано в кратком руководстве по созданию проекта Python с помощью шаблона.

Вопрос. Где можно подробнее узнать о других доступных пакетах Python?

Ответ. Перейдите к странице индекса пакетов Python.

Добавление файла кода

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

  1. Щелкните проект правой кнопкой мыши в Обозреватель решений и выберите «Добавить>новый элемент«.
  2. В открывшемся диалоговом окне выберите элемент Пустой файл Python, присвойте файлу имя app.py и нажмите кнопку Добавить. Файл автоматически откроется в редакторе кода Visual Studio.
  3. Скопируйте следующий код и вставьте его в app.py:
from flask import Flask # Create an instance of the Flask class that is the WSGI application. # The first argument is the name of the application module or package, # typically __name__ when using a single module. app = Flask(__name__) # Flask route decorators map / and /hello to the hello function. # To add other resources, create functions that generate the page contents # and add decorators to define the appropriate resource locators for them. @app.route('/') @app.route('/hello') def hello(): # Render the page return "Hello Python!" if __name__ == '__main__': # Run the app server on localhost:4449 app.run('localhost', 4449) 
  1. Щелкните проект правой кнопкой мыши в Обозреватель решений и выберите «Добавить>новый элемент«.
  2. В появившемся диалоговом окне выберите Пустой. В качестве имени введите app.py, а затем нажмите кнопку Добавить. Файл автоматически откроется в редакторе кода Visual Studio.
  3. Скопируйте следующий код и вставьте его в app.py:
from flask import Flask # Create an instance of the Flask class that is the WSGI application. # The first argument is the name of the application module or package, # typically __name__ when using a single module. app = Flask(__name__) # Flask route decorators map / and /hello to the hello function. # To add other resources, create functions that generate the page contents # and add decorators to define the appropriate resource locators for them. @app.route('/') @app.route('/hello') def hello(): # Render the page return "Hello Python!" if __name__ == '__main__': # Run the app server on localhost:4449 app.run('localhost', 4449) 

Как вы могли заметить, в диалоговом окне Добавить>Создать элемент отображается много других типов файлов, которые можно добавить в проект Python, в том числе класс Python, пакет Python, модульный тест Python, файлы web.config и многое другое. Как правило, эти шаблоны элементов прекрасно подходят для быстрого создания файлов при помощи полезного стандартного кода.

Вопрос. Где можно подробнее узнать о Flask?

Ответ. Ознакомьтесь с документацией по Flask. Начать можно с краткого руководства по Flask.

Выполнение приложения

  1. В Обозревателе решений щелкните правой кнопкой мыши файл app.py, а затем в раскрывающемся меню выберите Задать как файл запуска. С помощью этой команды файл кода задается как запускаемый в Python при запуске приложения.

Setting the startup file for a project in Solution Explorer

Screenshot that shows setting the startup file for a project in Solution Explorer.

Вопрос. В чем разница между командами «Запустить без отладки» и «Начать отладку»?

Ответ. Команда Начать отладку используется, чтобы запустить приложение в контексте отладчика Visual Studio. С помощью отладчика можно устанавливать точки останова, проверять переменные и поэтапно выполнять код строка за строкой. С отладчиком приложения могут работать медленнее, так как для отладки используются различные обработчики.

Команда Запустить без отладки запускает приложение напрямую, как если бы оно запускалось из командной строки без контекста отладки. Команда Запустить без отладки также автоматически запускает браузер и переходит по URL-адресу, указанному на вкладке Отладка свойств проекта.

Следующие шаги

Поздравляем с запуском вашего первого приложения Python из Visual Studio. Вы немного узнали об использовании Visual Studio в качестве интегрированной среды разработки Python!

Так как приведенные в этом руководстве инструкции довольно общие, вы, вероятно, догадались, что их можно и нужно автоматизировать. Такая автоматизация выполняется при помощи шаблонов проектов Visual Studio. Изучите краткое руководство Создание проекта Python с использованием шаблона, чтобы узнать, как создать веб-приложение, похожее на описанные в этой статье, но с меньшим количеством шагов.

Чтобы перейти к более полному учебнику по работе с Python в Visual Studio, в том числе к использованию интерактивного окна, отладки, визуализации данных и работы с Git, см. раздел Учебник. Начало работы с Python в Visual Studio.

Более подробно ознакомиться с возможностями Visual Studio можно по приведенным ниже ссылкам.

  • Сведения о шаблонах веб-приложений Python в Visual Studio.
  • Сведения об отладке Python
  • Общие сведения об интегрированной среде разработки Visual Studio.

Создаём установщик веб-приложения Python, включающий Apache, Django и PostgreSQL для ОС Windows

Данный пост является продолжением первой части статьи на Хабре, где было подробно рассказано о развертывании Django стека на MS Windows. Далее будет представлена пошаговая инструкция по созданию инсталлятора, который будет автоматизировать процесс установки стека на других компьютерах без необходимости работы в командной строке, созданием виртуальных машин и т.д., где вся последовательность действий будет сводится к действиям Далее -> Далее -> Готово.

Итак, что должен делать инсталлятор:

  1. Распаковать все необходимые программы и компоненты в указанную пользователем директорию.
  2. Выполнить проверки перед установкой.
  3. Прописать интерпретатор Python в реестре Windows.
  4. Установить, если ещё не установлены, программные библиотеки зависимостей.
  5. Создать службы Apache и PostgreSQL, затем стартовать их.
  6. Дополнительным плюсом будет автоматическое создание программы деинсталлятора, который удалит установленный стек, если пользователь этого захочет.

Лучше всего то, что для создания базового установщика вообще не требуется никаких сценариев, поскольку Inno Setup поставляется с графическим мастером, который на удивление хорошо справляется с базовыми установщиками.

Логика установки может быть написана на ЯП Pascal, а не на запутанных пользовательских действиях в Wix. Единственным недостатком его является то, что он создает только exe, формат файлов msi не поддерживается.

Шаг 1. Установка Inno Setup

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

Шаг 2: Создание сценария установки Inno Setup

Создадим заготовку сценария установки Inno Setup (файл *.iss) с помощью Мастера сценариев установки.

В результате будет создан *.iss файл с следующим содержимым:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName «Severcart»
#define MyAppVersion «1.21.0»
#define MyAppPublisher «Severcart Inc.»
#define MyAppURL «https://www.severcart.ru/»

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId=
AppName=
AppVersion=
;AppVerName=
AppPublisher=
AppPublisherURL=
AppSupportURL=
AppUpdatesURL=
DefaultDirName=c:\severcart
DefaultGroupName=
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputDir=C:\Users\Developer\Desktop\Output
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: «russian»; MessagesFile: «compiler:Languages\Russian.isl»

[Files]
Source: «C:\severcart\*»; DestDir: «»; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don’t use «Flags: ignoreversion» on any shared system files

Шаг 3. Проверки перед установкой

Перед распаковкой программ в каталог и изменения в реестре необходимо проверить, что TCP порты свободны для работы Apache и PostgreSQL, также нужно проверить минимальные системные требования ОС Windows, т.к. как уже оговаривалось в Первой части данной статьи устанавливаемая версия Python будет работать только начиная с версии MS Windows 8 (версия ядра 6.2).

Для выполнения необходимых проверок воспользуемся секцией [Code] установочного файла. Раздел [Code] – это необязательный раздел, определяющий сценарий Pascal. Сценарий Pascal можно использовать для настройки установки или удаления разными способами. Обратите внимание, что создать сценарий Pascal непросто и требует опыта работы с Inno Setup и умений программирования на Pascal или, по крайней мере, на аналогичном языке программирования.

function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result := (Version.Major > Major) or ((Version.Major = Major) and (Version.Minor >= Minor));
end;

function IsWindows8OrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(6, 2);
end;

Для проверки доступности TCP портов создадим следующую функцию:

function CheckPortOccupied(Port:String):Boolean;
var
ResultCode: Integer;
begin
Exec(ExpandConstant(»), ‘/C netstat -na | findstr’+’ /C:»:’+Port+’ «‘, »,0,ewWaitUntilTerminated, ResultCode);
if ResultCode <> 1 then
begin
Log(‘this port(‘+Port+’) is occupied’);
Result := True;
end else
begin
Result := False;
end;
end;

Вызывать проверочные функции будем в функции InitializeSetup, вызываемой во время инициализации установки. Возвращает False, для отмены установки, в противном случае — True.

function InitializeSetup(): Boolean;
var
port_80_check, port_5432_check: boolean;
begin
if not IsWindows8OrNewer() then begin
MsgBox(‘Установка невозможна. Программа работает начиная с Windows 2012 и Windows 8.0.’,mbError,MB_OK);
Abort();
Result := False;
end;

port_80_check := CheckPortOccupied(‘8080’);
if port_80_check then begin
MsgBox(‘Установка невозможна. TCP порт 8080 занят.’,mbError,MB_OK);
Abort();
Result := False;
end;

port_5432_check := CheckPortOccupied(‘5432’);
if port_5432_check then begin
MsgBox(‘Установка невозможна. TCP порт 5432 занят.’,mbError,MB_OK);
Result := False;
Abort();
end;
Result := True;

Шаг 4. Прописываем Python в реестре Windows

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

Для этого добавляем ключи PYTHONPATH, PYTHONHOME и обновляем переменную Path.

sys.path содержит список строк, предоставляющих места поиска модулей и пакетов будущего Python проекта. Он инициализируется из переменной среды PYTHONPATH и другими настройками.

PYTHONHOME — домашний каталог Python.

PATH — это переменная окружения, которая ОС использует для поиска исполняемых файлов в командной строке или окне терминала.

Root: HKLM; Subkey: «SYSTEM\CurrentControlSet\Control\Session Manager\Environment»; \
ValueType: expandsz; ValueName: «Path»; ValueData: «;\python;\python\Scripts»

Root: HKLM; Subkey: «SYSTEM\CurrentControlSet\Control\Session Manager\Environment»; \
ValueType: expandsz; ValueName: «PYTHONPATH»; ValueData: «\python»

Root: HKLM; Subkey: «SYSTEM\CurrentControlSet\Control\Session Manager\Environment»; \
ValueType: expandsz; ValueName: «PYTHONHOME»; ValueData: «\python»

Шаг 5. Создаем конфигурационные файлы служб Apache и PostgreSQL

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

Вызов скриптов будет производиться в разделе [Run] установщика.

Раздел [Run] является необязательным и указывает любое количество программ, которые необходимо выполнить после успешной установки программы, но до того, как программа установки отобразит последнее диалоговое окно.

Далее в эту же секцию добавим скрытую установку распространяемые пакеты Visual Studio без которых службы Apache и PostgreSQL работать не будут.

Filename: «\common\VC_redist.x86apache.exe»; Parameters: «/install /passive»; Flags: waituntilterminated
Filename: «\common\vcredist_x86pg.exe»; Parameters: «/install /passive»; Flags: runhidden;
Filename: «\python\python.exe» ;Parameters: «\common\create_http_conf.py»; Flags: runhidden
Filename: «\python\python.exe» ;Parameters: «\common\edit_pg_conf.py»; Flags: runhidden
Filename: «\common\install.bat»;Flags: runhidden
Filename: «\common\services_start.bat»; Flags: runhidden

Содержимое файла create_http_conf.py

#!/usr/bin/env python3 # -*- coding:utf-8 -*- import sys, os base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) base_path_un = base_path.replace('\\', '/') apache_conf_path = os.path.join(base_path, 'Apache24', 'conf', 'extra', 'httpd-wsgi.conf') print('base_path=',base_path) CONF = """ LoadFile "%(base)s/python/python39.dll" LoadModule wsgi_module "%(base)s/python/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win32.pyd" WSGIPythonHome "%(base)s/python" Alias /static "%(base)s/app/static" Alias /media "%(base)s/app/media" # for Apache 2.4 Options Indexes FollowSymLinks AllowOverride None Require all granted # for Apache 2.4 Options Indexes FollowSymLinks AllowOverride None Require all granted WSGIScriptAlias / "%(base)s/app/conf/wsgi_prod.py" WSGIPythonPath "%(base)s/python/"  Require all granted  """ conf_content = CONF % with open(apache_conf_path, 'w') as fp: fp.write(conf_content) # Read in the file apache_main = os.path.join(base_path, 'Apache24', 'conf', 'httpd.conf') with open(apache_main, 'r') as file : filedata = file.read() # Replace the target string replace_pattern = 'Define SRVROOT "%(base)s/Apache24"' % find_pattern = 'Define SRVROOT "C:/severcart/Apache24"' filedata = filedata.replace(find_pattern, replace_pattern) # Write the file out again with open(apache_main, 'w') as file: file.write(filedata) 
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import sys, os """ c:/djangostack/postgresql/bin/postgres.exe "-D" "c:\djangostack\postgresql\data" """ base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) base_path_un = base_path.replace('\\', '/') pg_conf_path = os.path.join(base_path, 'postgresql', 'data', 'postmaster.opts') # Read in the file pg_conf_path = os.path.join(base_path, 'postgresql', 'data', 'postmaster.opts') with open(pg_conf_path, 'r') as file : filedata = file.read() # Replace the target string replace_pattern = base_path_un + '/' find_pattern = "C:/severcart/" filedata = filedata.replace(find_pattern, replace_pattern) # Write the file out again with open(pg_conf_path, 'w') as file: file.write(filedata) 

Содержимое файла install.bat

..\Apache24\bin\httpd.exe -k install -n «Apache» > install.log 2>&1

..\postgresql\bin\pg_ctl.exe register -N «PostgreSQL» -D ..\postgresql\data > install.log 2>&1

Содержимое файла services_start.bat

net start «Apache»

net start «PostgreSQL»

Шаг 6: Создаем деинсталлятор

Для любого инсталлятора также необходимо предусмотреть возможность создания программы деинсталлятора. К счастью программа Inno Setup сделает эту работу за нас, за исключением некоторых действий, которые нужно предусмотреть для очистки следов присутствия программы в ОС.

Для этого в секции [UninstallRun] пропишем выполнение bat скрипта Windows для остановки установленных служб, а также их удаления.

[UninstallRun]
Filename: «\common\remove.bat»; Flags: runhidden

Содержимое bat скрипта:

SC STOP Apache
SC STOP PostgreSQL

SC DELETE Apache
SC DELETE PostgreSQL

Скрипт выполняет остановку служб, затем удаляет службы Apache и PostgreSQL из перечня системных служб Windows.

Шаг 7. Подписание исполняемого файла инсталлятора ЭП разработчика

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

Купить сертификат разработчика PFX, например можно здесь. Сертификат приобретается на год.

Предпоследним шагом над работы с инсталлятором будет автоматический запуск программы signtool.exe для подписания готового инсталлятора в формате exe после того как программа Inno Setup завершит свою работу. SignTool — это программа командной строки, которая подписывает файлы цифровой подписью, проверяет подписи в файлах и временные метки файлов. По умолчанию в комплекте поставки Windows программа signtool.exe отсутствует, поэтому скачиваем и устанавливаем Windows 10 SDK.

По окончании установки вы найдете signtool.exe в каталогах:

  • x86 -> c:\Program Files (x86)\Windows Kits\10\bin\x86\
  • x64 -> c:\Program Files (x86)\Windows Kits\10\bin\x64\

Далее настроим автоматическое подписание файла. Выбираем «Configure Sign Tools. » из меню «Tools».

Далее нажимаем на кнопку «Add»

Дадим инструменту имя. Это имя, которое вы будете использовать при обращении к инструменту в сценариях установщика. Я назвал свой signtool, потому что использую signtool.exe.

Вставьте текст, который вы используете для подписи исполняемых файлов из командной строки. Замените имя подписываемого файла на $f. Inno Setup заменит переменную $f подписываемым файлом.

«C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe» sign /f «C:\MY_CODE_SIGNING.PFX» /t timestamp.comodoca.com/authenticode /p MY_PASSWORD $f

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

Добавим следующий сценарий в раздел [Setup], чтобы использовать только что настроенный инструмент подписи. Это предполагает, что вы назвали свой инструмент signtool.

Шаг 8. Собираем инсталлятор

Итоговый InnoSetup файл инсталлятора

#define MyAppName «Severcart»
#define MyAppVersion «1.21.0»
#define MyAppPublisher «Severcart Inc.»
#define MyAppURL «www.severcart.ru»

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
SignTool=signtool
AppId=>
AppName=
AppVersion=
;AppVerName=
AppPublisher=
AppPublisherURL=
AppSupportURL=
AppUpdatesURL=
DefaultDirName=c:\severcart
DefaultGroupName=
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ChangesEnvironment=yes

; Uninstall options
Uninstallable=yes
CreateUninstallRegKey=yes
;WizardSmallImageFile=logo3.bmp

[Languages]
Name: «russian»; MessagesFile: «compiler:Languages\Russian.isl»

[Files]
Source: «C:\severcart\*»; Excludes: «*.pyc»; DestDir: «»; Flags: ignoreversion recursesubdirs createallsubdirs

[Registry]
Root: HKLM; Subkey: «SYSTEM\CurrentControlSet\Control\Session Manager\Environment»; \
ValueType: expandsz; ValueName: «Path»; ValueData: «;\python;\python\Scripts»

Root: HKLM; Subkey: «SYSTEM\CurrentControlSet\Control\Session Manager\Environment»; \
ValueType: expandsz; ValueName: «PYTHONPATH»; ValueData: «\python»

Root: HKLM; Subkey: «SYSTEM\CurrentControlSet\Control\Session Manager\Environment»; \
ValueType: expandsz; ValueName: «PYTHONHOME»; ValueData: «\python»

[Run]
Filename: «\common\VC_redist.x86apache»; Parameters: «/install /passive»; Flags: waituntilterminated
Filename: «\common\vcredist_x86pg»; Parameters: «/install /passive»; Flags: runhidden;
Filename: «\python\python.exe» ;Parameters: «\common\create_http_conf.py»; Flags: runhidden
Filename: «\python\python.exe» ;Parameters: «\common\edit_pg_conf.py»; Flags: runhidden
Filename: «\common\install.bat»;Flags: runhidden
Filename: «\common\services_start.bat»; Flags: runhidden

[UninstallRun]
Filename: «\common\remove.bat»; Flags: runhidden

[Code]
function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result :=
(Version.Major > Major) or
((Version.Major = Major) and (Version.Minor >= Minor));
end;

function IsWindows8OrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(6, 2);
end;

function CheckPortOccupied(Port:String):Boolean;
var
ResultCode: Integer;
begin
Exec(ExpandConstant(»), ‘/C netstat -na | findstr’+’ /C:»:’+Port+’ «‘, »,0,ewWaitUntilTerminated, ResultCode);
if ResultCode <> 1 then
begin
Log(‘this port(‘+Port+’) is occupied’);
Result := True;
end else
begin
Result := False;
end;
end;

function InitializeSetup(): Boolean;
var
port_80_check, port_5432_check: boolean;
begin
if not IsWindows8OrNewer() then begin
MsgBox(‘Установка невозможна. Программа работает начиная с Windows 2012 и Windows 8.0.’,mbError,MB_OK);
Abort();
Result := False;
end;

port_80_check := CheckPortOccupied(‘8080’);
if port_80_check then begin
MsgBox(‘Установка невозможна. TCP порт 8080 занят.’,mbError,MB_OK);
Abort();
Result := False;
end;

port_5432_check := CheckPortOccupied(‘5432’);
if port_5432_check then begin
MsgBox(‘Установка невозможна. TCP порт 5432 занят.’,mbError,MB_OK);
Result := False;
Abort();
end;
Result := True;

Шаг 9. Проверяем работу инсталлятора

На это всё, спасибо за внимание.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *