- en
- Language: ru
- Documentation version: 1.1.x
Развертывание с помощью инструментов 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
и вы используете не модуль, а package. Если вы еще не преобразовали свое приложение в пакет, перейдите к шаблону Крупные приложения, чтобы увидеть, как это можно сделать.
Рабочее развертывание с помощью setuptools - это первый шаг к более сложным и автоматизированным сценариям развертывания. Если вы хотите полностью автоматизировать процесс, прочитайте также главу Развертывание с помощью Fabric.
Основной сценарий настройки¶
Поскольку у вас установлен Flask, в вашей системе есть setuptools. Flask уже зависит от setuptools.
Применяется стандартный отказ от ответственности: you better use a 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
. В этом файле перечислены все файлы, которые должны быть добавлены в ваш tarball:
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 должен искать tarballs:
dependency_links=['http://example.com/yourfiles']
Убедитесь, что на странице есть список каталогов, а ссылки на странице указывают на реальные tarballs с правильными именами файлов, так как именно так setuptools будет находить файлы. Если у вас есть внутренний сервер компании, на котором хранятся пакеты, укажите URL-адрес этого сервера.
Установка / разработка¶
Чтобы установить ваше приложение (в идеале в virtualenv), просто запустите скрипт setup.py
с параметром install
. Он установит ваше приложение в папку site-packages виртуальной среды, а также загрузит и установит все зависимости:
$ python setup.py install
Если вы разрабатываете на основе пакета и также хотите, чтобы требования были установлены, вы можете использовать вместо этого команду develop
:
$ python setup.py develop
Преимущество этого способа в том, что вместо копирования данных в папку site-packages можно просто установить ссылку на сайт. Вы можете продолжать работать над кодом, не выполняя install
после каждого изменения.