Как распространять приложения на python
Все библиотеки Python (т.е. пакеты прикладных программ), которые вы загружаете при помощи менеджера пакетов (например, PIP), распределяются с помощью специальной утилиты. Такие утилиты создают дистрибутивы Python; по сути, это сжатые версированные архивы, содержащие все связанные элементы, например, исходные и ресурсные файлы.
Данное руководство рассказывает о важных инструментах для дистрибуции приложений и ключевых этапах пакетирования библиотек, модулей и приложений. Это поможет развернуть собственный проект.
Дистрибутивы и пакеты Python
Даже пользователи с небольшим опытом работы с Python должны уметь использовать менеджер пакетов (например, pip, easy_install) для загрузки модулей и библиотек, которые в дальнейшем можно импортировать и использовать для создания нового приложения.
Эти инструменты управления пакетами при локальном использовании подключаются к исходникам и выполняют необходимое действие (установку, поиск и т.д.).
Для дистрибуции приложения нужно:
- Упаковать каталог приложения, добавив в него необходимые и рекомендуемые файлы;
- Указать элементы, связанные с приложением (зависимости, ресурсы и т.п.)
- Выпустить релиз приложения.
Примечание: В работе настоятельно рекомендуется использовать виртуальное окружение (virtualenv), позволяющее изолировать загрузки, модули и остальные компоненты определённого приложения Python.
Пакет Python технически являются импортируемым каталогом (с __init__.py), содержащим исходные файлы (модули). Не нужно путать их с пакетами операционной системы, которые технически являются приложениями.
Пример структуры пакета:
Приложения Python
В целом, приложение Python может состоять как из одного файла, так и из сотни. Но, как правило, оно содержит несколько модулей и определённое количество внешних файлов (из библиотек).
Пример структуры приложения:
Инструменты и библиотеки Python
Сегодня Python пользуется широкой популярностью, а потому для него разработано много сторонних библиотек и приложений, которые способны сделать процесс дистрибуции более простым и удобным.
Для управления дистрибуцией Python предлагает утилиту distutils.
Каталог пакетов Python
Python Package Index, чаще PyPI – это централизованный онлайн-репозиторий, предназначенный для проектов-дистрибутивов Python. Пакетные менеджеры (например, pip) используют этот репозиторий для хранения, поиска и установки необходимых дистрибутивов.
Для начала попробуем создать простое Python-приложение, которое потом можно пакетировать.
Структура приложения
Данное тестовое приложение будет иметь наиболее общую и распространённую структуру, дополненную несколькими модулями.
/MyApplication
|-- run.py
|-- config.py
|__ /app
|-- __init__.py
|-- /module_one
|-- __init__.py
|-- controllers.py
|-- models.py
|__ /templates
|-- module_one
|-- hello.html
|__ /static
|__ ..
|__ .
Создайте необходимые папки:
/MyApplication
touch run.py
touch config.py
mkdir app
cd app
touch __init__.py
mkdir templates
mkdir static
mkdir module_one
cd module_one
touch __init__.py
touch controllers.py
touch models.py
cd ../templates
mkdir module_one
cd module_one
touch hello.html
Поместите в него следующий код:
Сохраните и закройте файл (CTRL+X, Y).
Затем откройте в текстовом редакторе config.py:
Вставьте в него следующий код:
DEBUG = True
THREADS_PER_PAGE = 4
CSRF_ENABLED = True
CSRF_SESSION_KEY = "secret"
Сохраните и закройте файл (CTRL+X, Y).
Откройте файл app/init.py в текстовом редакторе:
Добавьте в него код:
from flask import Flask, render_template
app = Flask(__name__)
app.config.from_object("config")
from app.module_one.controllers import module_one
app.register_blueprint(module_one)
Сохраните и закройте файл.
Откройте app/module_one/controllers.py в текстовом редакторе:
Добавьте в файл следующий контент:
from flask import Blueprint, request, render_template
module_one = Blueprint("auth", __name__, url_prefix="/auth")
@module_one.route("/hello")
def hello():
return render_template("module_one/hello.html")
Сохраните и закройте файл.
Откройте в редакторе файл app/templates/module_one/hello.html:
Поместите в него:
Сохраните и закройте файл (CTRL+X, Y).
Тестовое приложение готово.
Дистрибуция и пакетирование приложения
Теперь на сервере есть простое приложение, основанное на flask, которое можно подготовить к дистрибуции.
Редактирование структуры папок
Чтобы пакетирование приложения прошло успешно, нужно внести некоторые поправки в структуру папок.
После этого нужно создать дополнительные файлы:
Создайте файл setup.py:
Добавьте в него такой код:
Сохраните и закройте файл.
Создание MANIFEST.in
При необходимости внести в пакет приложения дополнительные каталоги (статические файлы или шаблоны) укажите их в MANIFEST.in, после чего они будут упакованы.
Добавьте в файл строки:
recursive-include app/templates *
recursive-include app/static *
Сохраните и закройте файл.
Теперь пакет дистрибутива Python готов к установке и отправке.
Дополнительные файлы
Помните, что для создания полного дистрибутива нужно добавить в файл/каталог и настроить поддержку следующих файлов:
- README.txt
- MANIFEST.in
- LICENSE.txt
Работа с приложением, готовым к дистрибуции
На данном этапе приложение полностью готово к операции пакетирования.
Создание файла дистрибутива
Чтобы создать копию файла дистрибутива, запустите:
/MyApplication
python setup.py sdist
Эта команда просмотрит настройку, выведет выполняемые операции и создаст архива внутри только что созданного каталога diet, что выглядит примерно так:
Примечание: Поскольку не все подкаталоги и дополнительные файлы были ранее заполнены, на данном этапе может система может вернуть предупреждение.
Установка приложения
Теперь другие пользователи могут установить приложение при помощи файла setup.py.
Чтобы установить приложение, запустите:
python setup.py install
Если эта установка предназначена для разработки и не все зависимости установлены, введите:
python setup.py develop
Распространение приложения
Чтобы поделиться своим кодом в Python Packaging Index, используйте команду register:
python setup.py register
После запуска команды следуйте инструкциям на экране.
Если у вас уже есть учётная запись, используйте следующую команду, чтобы просто выгрузить код:
программа запускается с main.py - . Есть ли хороший способ создать из него "окончательное" приложение? Я думаю о чем-то вроде py2exe/py2app, но без копирования интерпретатора / модулей python в приложение, где есть только один исполняемый файл.
Я посмотрел на distutils, но это похоже на то, что он устанавливает программу в каталог Python, который не является обычным для не-linux платформы.
на данный момент я просто копирую всю исходную папку на целевую машину и создаю псевдоним в main.pyw на windows. Некоторые неудобства:
- значок является значком python по умолчанию.
- Я должен создать псевдоним вручную.
- в моем исходном каталоге есть много дополнительных файлов, таких как папка управления версиями.
- Я должен переименовать main.py to main.pyw вручную.
- было бы неплохо хотя бы.` Пе* файлы на целевом компьютере. Нет никакой реальной причины для этого, мне просто не нравится иметь ненужные файлы.
как создать хороший автоматический дистрибутив?
- для windows? (Это единственная платформа, которую я должен поддерживать на данный момент.)
- для mac?
- для linux?
обычный способ распространения приложений Python - это distutils. Он сделан как для распространения модулей python библиотечного типа, так и для приложений python, хотя я не знаю, как он работает в Windows. В любом случае вам придется устанавливать Python отдельно, если вы используете distutils.
Я бы, вероятно, рекомендовал вам распространять его с disutils для Linux и Py2exe или что-то подобное для Windows. Для OS X я не знаю. Если это конечный пользователь приложение вам, вероятно, понадобится тип образа диска, я не знаю, как это сделать. Но читайте!--5-->этот пост для получения дополнительной информации о пользовательском опыте ИТ. Для приложения, сделанного для программистов, вы, вероятно, в порядке с установкой типа distutils на OS X тоже.
рекомендую Pyinstaller, который поддерживает все основные платформы довольно легко. Как py2exe и py2app, он производит стандартный исполняемый файл на Windows и пакет приложений на OS X, но имеет преимущество также делать фантастическую работу автоматического разрешения общих зависимостей и включая их без дополнительных настроек конфигурации.
также обратите внимание, что если вы развертываете Python 2.6 в Windows, вы должны применить этот патч в Pyinstaller ствол.
Вы указали, что вам не нужен установщик, но Inno Setup это простой в использовании и быстрый в настройке выбор для платформы Windows.
Фредрик Lundhбыл это squeeze.py можно создать один файл, который не содержит интерпретатор Python, но вместо этого содержит байт-код. С правильными аргументами вы можете включить другие файлы, модули и т. д. в файле результатов. Я успешно использовал его в одном проекте. Полученная программа работала на OS X, Linux и Windows без каких-либо проблем!
PS: каждая машина должна иметь интерпретатор Python, который совместим с байт-кодом, сгенерированным squeeze.py - . При необходимости вы можете создавать разные версии байт-кода для разных версий Python (просто запустите squeeze.py с правильной версией Python).
Я могу ошибаться, но разве у IronPython нет встроенного компилятора для windows?
попробуйте Cx_Freeze, намного лучше .ру .exe (плюс несколько .DLL) компилятор, который я когда-либо использовал.
Если вы распространяете в windows, используйте установки для установки всех соответствующих файлов / interpeter все, что необходимо. Распределите установку.исполняемый. Это лучший способ для windows. В противном случае пользователи будут жаловаться.
самый удобный * кросс-платформенный способ распространения настольных приложений python-полагаться на кросс-платформенный менеджер пакетов conda. Есть несколько инструментов, которые используют его:
* наиболее удобный для разработчика. Достаточно удобно для конечного пользователя.
Программа запускается с main.py. Есть ли хороший способ создать из него «окончательное» приложение? Я имею в виду что-то вроде py2exe / py2app, но без копирования интерпретатора / модулей python в приложение, в котором только один исполняемый файл.
Я посмотрел на distutils, но похоже, что он устанавливает программу в каталог Python, что не является обычным явлением для не-Linux-платформ.
На данный момент я просто копирую всю исходную папку на целевой компьютер и создаю псевдоним main.pyw в Windows. Некоторые неудобства:
- Значок является значком Python по умолчанию.
- Я должен создать псевдоним вручную.
- В моем исходном каталоге много дополнительных файлов, таких как папка управления исходным кодом.
- Я должен переименовать main.py в main.pyw вручную.
- Было бы хорошо, если бы на целевом компьютере были только файлы `.pyo *. Для этого нет реальной причины, просто мне не нравятся ненужные файлы.
Как создать хороший автоматический дистрибутив?
- для окон? (Это единственная платформа, которую я должен поддерживать на данный момент.)
- для Mac?
- для Linux?
Обычный способ распространения приложений Python - использование distutils. Это сделано как для распространения модулей Python библиотечного типа, так и для приложений Python, хотя я не знаю, как это работает в Windows. В любом случае, в Windows вам придется устанавливать Python отдельно, если вы используете distutils.
Возможно, я бы порекомендовал вам распространять его с disutils для Linux и Py2exe или чем-то похожим для Windows. Для OS X я не знаю. Если это приложение для конечного пользователя, вы, вероятно, захотите что-то типа образа диска, я не знаю, как это сделать. Но прочитайте этот пост для получения дополнительной информации о его работе с пользователем. Для приложения, созданного для программистов, вы, вероятно, в порядке с установкой типа distutils на OS X.
Наиболее удобный * кроссплатформенный способ распространения настольных приложений Python - это использование кроссплатформенного менеджера пакетов conda. Есть несколько инструментов, которые используют его:
* Наиболее удобный для разработчика. Достаточно удобно для конечного пользователя.
Если вы распространяете в Windows, воспользуйтесь установщиком, чтобы установить все необходимые файлы / интерпретаторы, какие бы они ни были необходимы. Раздайте файл setup.exe. Это лучший способ для окон. В противном случае пользователи будут жаловаться.
Я могу ошибаться, но разве у IronPython нет встроенного компилятора для Windows?
Попробуйте Cx_Freeze, безусловно, лучший компилятор .py в .exe (плюс несколько .dll), который я когда-либо использовал.
Я думаю, что также стоит упомянуть PEX (учитывая больше внимания к этому вопросу и меньше сам вопрос ) . Согласно собственному описанию:
Я наткнулся на него, когда прочитал обзор упаковки для python. Они разместили эту красивую картинку там:
Подводя итог: если вы можете позволить себе полагаться на установку Python на целевой машине, используйте PEX для создания самодостаточного «исполняемого файла», который, вероятно, будет иметь меньший размер файла, чем, например, исполняемый файл, созданный PyInstaller.
squeeze.py Фредрика Лунда может создать один файл, который не содержит интерпретатор Python, но вместо этого содержит байт-код. С правильными аргументами вы можете включить другие файлы, модули и т. Д. В файл результатов. Я успешно использовал его в одном проекте. Полученная программа работала на OS X, Linux и Windows без проблем!
PS : на каждой машине должен быть интерпретатор Python, совместимый с байт-кодом, генерируемым squeeze.py. При необходимости вы можете сгенерировать разные версии байт-кода для разных версий Python (просто запустите squeeze.py с нужной версией Python).
Я настоятельно рекомендую Pyinstaller, который поддерживает все основные платформы без проблем. Как и py2exe и py2app, он создает стандартный исполняемый файл для Windows и пакет приложений для OS X, но имеет преимущество в том, что он также делает фантастическую работу по автоматическому разрешению общих зависимостей и включению их без дополнительных настроек конфигурации.
Также обратите внимание, что если вы развертываете Python 2.6 в Windows, вам следует применить этот патч к транку Pyinstaller. ,
Вы указали, что вам не нужен установщик, но Inno Setup - это простая в использовании и быстрая настроить выбор для платформы Windows.
Программа запускается с main.py. Есть ли хороший способ создать на его основе «окончательное» приложение? Я думаю о чем-то вроде py2exe / py2app, но без копирования интерпретатора / модулей python в приложение, где есть только один исполняемый файл.
Я смотрел distutils, но похоже, что он устанавливает программу в каталог Python, что не является обычным для платформ, отличных от Linux.
На данный момент я просто копирую всю исходную папку на целевую машину и создаю псевдоним для main.pyw Windows. Некоторые неудобства:
- Значок является значком Python по умолчанию.
- Мне нужно создать псевдоним вручную.
- В моем исходном каталоге есть много дополнительных файлов, таких как папка управления версиями.
- Я должен переименовать , main.py чтобы main.pyw вручную.
- Было бы неплохо, если бы на целевой машине были только файлы `.pyo *. Для этого нет реальной причины, мне просто не нравится иметь ненужные файлы.
Как создать хорошее автоматизированное распространение?
- для окон? (Это единственная платформа, которую я должен поддерживать на данный момент.)
- для Mac?
- для linux?
Обычный способ распространения приложений Python - с помощью distutils . Он предназначен как для распространения модулей Python библиотечного типа, так и для приложений Python, хотя я не знаю, как это работает в Windows. В любом случае вам придется в Windows установить Python отдельно, если вы используете distutils.
Я бы, вероятно, порекомендовал вам распространять его с помощью disutils для Linux и Py2exe или чего-то подобного для Windows. Для OS X не знаю. Если это приложение для конечного пользователя, вам, вероятно, понадобится нечто вроде образа диска, я не знаю, как это сделать. Но прочтите этот пост для получения дополнительной информации о пользовательском опыте. Для приложения, созданного для программистов, вам, вероятно, тоже подойдет установка типа distutils на OS X.
Читайте также: