Развёртывание с помощью Setuptools
Setuptools, это расширяющая библиотека, которая обычно используется для распространения библиотек и расширений Python. Она расширяет distutils, базовую систему установки модулей, поставляемую с Python, для поддержки различных более сложных конструкций, которые облегчают распространение больших приложений:
- поддержка зависимостей: библиотека или приложение может объявлять список других библиотек, от которых она зависит, которые будут установлены автоматически.
- реестр пакетов: setuptools регистрирует ваш пакет в вашей установке Python. Это позволяет запросить информацию, предоставляемую одним пакетом, из другого пакета. Наиболее известной особенностью этой системы является поддержка точек входа, которая позволяет одному пакету объявлять «точку входа», в которую другой пакет может подключиться, чтобы расширить другой пакет.
- менеджер установки: pip может устанавливать другие библиотеки за вас.
Если у вас установлены Python 2 (>=2.7.9) или Python 3 (>=3.4) с сайта python.org, у вас уже есть pip и setuptools в вашей системе. В противном случае вам нужно установить их самостоятельно.
Сам Flask и все библиотеки, которые вы можете найти на PyPI, распространяются с использованием setuptools или distutils.
В этом случае мы предполагаем, что ваше приложение называется yourapplication.py и вы не используете модуль, а пакет. Если вы ещё не преобразовали своё приложение в пакет, перейдите к шаблону Большие приложения, чтобы узнать, как это сделать.
Рабочее развёртывание с помощью setuptools — это первый шаг к более сложным и автоматизированным сценариям развёртывания. Если вы хотите полностью автоматизировать процесс, прочитайте также главу Развёртывание с Fabric.
Базовый скрипт настройки
Поскольку у вас установлен Flask, у вас есть setuptools в вашей системе. Flask уже зависит от setuptools.
Применяется стандартное ограничение: лучше использовать virtualenv.
Ваш код настройки всегда помещается в файл с именем setup.py рядом с вашим приложением. Имя файла — только соглашение, но поскольку все будут искать файл с этим именем, лучше его не менять.
Базовый файл setup.py для приложения Flask выглядит так:
from setuptools import setup
setup(
name='Your Application',
version='1.0',
long_description=__doc__,
packages=['yourapplication'],
include_package_data=True,
zip_safe=False,
install_requires=['Flask']
)
Пожалуйста, имейте в виду, что вам нужно явно указать подпакеты. Если вы хотите, чтобы setuptools автоматически находил пакеты, вы можете использовать функцию find_packages.
from setuptools import setup, find_packages
setup(
...
packages=find_packages()
)
Большинство параметров функции setup должны быть самодокументируемыми, include_package_data и zip_safe могут быть не очевидны. include_package_data сообщает setuptools о поиске файла MANIFEST.in и установке всех совпадающих записей в качестве данных пакета. Мы будем использовать это для распространения статических файлов и шаблонов вместе с модулем Python (см. Распространение ресурсов). Флаг zip_safe можно использовать для принудительной или предотвращения создания zip-архивов. В общем случае, вероятно, не стоит устанавливать ваши пакеты как zip-файлы, потому что некоторые инструменты их не поддерживают, а отладка с ними значительно сложнее.
Разметка сборки
Полезно различать выпускные и тестовые сборки. Добавьте файл setup.cfg для настройки этих опций.
[egg_info] tag_build = .dev tag_date = 1 [aliases] release = egg_info -Db ''
Запуск python setup.py sdist создаст тестовый пакет с добавлением ".dev" и текущей даты: flaskr-1.0.dev20160314.tar.gz. Запуск python setup.py release sdist создаст релизный пакет только с версией: flaskr-1.0.tar.gz.
Распространение ресурсов
Если вы попытаетесь установить только что созданный пакет, вы заметите, что папки, такие как static или templates не будут установлены. Причина в том, что setuptools не знает, какие файлы добавить. Вам нужно создать файл MANIFEST.in рядом с файлом setup.py. Этот файл перечисляет все файлы, которые должны быть добавлены в ваш архив:
recursive-include yourapplication/templates * recursive-include yourapplication/static *
Не забудьте, что даже если вы включите их в свой файл MANIFEST.in, они не будут установлены, если вы не установите параметр include_package_data функции setup в True!
Объявление зависимостей
Зависимости объявляются в параметре install_requires в виде списка. Каждый элемент в этом списке — имя пакета, который должен быть получен из PyPI при установке. По умолчанию всегда используется самая последняя версия, но вы также можете указать минимальные и максимальные требования к версии. Вот несколько примеров:
install_requires=[
'Flask>=0.2',
'SQLAlchemy>=0.6',
'BrokenPackage>=0.7,<=1.0'
]
Как упоминалось ранее, зависимости извлекаются из PyPI. А что, если вы хотите зависеть от пакета, который не найден в PyPI и не будет, потому что это внутренний пакет, которым вы не хотите делиться ни с кем? Просто сделайте это так, как будто есть запись PyPI, и укажите список альтернативных мест, где setuptools должен искать tarball:
dependency_links=['http://example.com/yourfiles']
Убедитесь, что на странице есть перечисление каталогов, и ссылки на странице указывают на фактические tarball с правильными именами файлов, так как именно так setuptools будет находить файлы. Если у вас есть внутренний сервер компании, содержащий пакеты, укажите URL этого сервера.
Установка / Разработка
Чтобы установить своё приложение (в идеале в virtualenv), просто запустите скрипт setup.py с параметром install. Он установит ваше приложение в папку site-packages virtualenv, а также загрузит и установит все зависимости:
$ python setup.py install
Если вы разрабатываете пакет и также хотите установить зависимости, вы можете использовать команду develop вместо неё:
$ python setup.py develop
Это имеет преимущество простого добавления ссылки в папку site-packages вместо копирования данных. Вы можете продолжить работу над кодом, не выполняя install снова после каждого изменения.
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/1.0.x/patterns/distribute/