Spec-Zone.ru › Flask 0.12

Развёртывание с помощью 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 -RDb ‘’

Запуск 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 должен искать tarball:

dependency_links=['http://example.com/yourfiles']

Убедитесь, что на странице есть список каталога, а ссылки на странице указывают на фактические tarball с правильными именами файлов, так как именно так setuptools будет находить файлы. Если у вас есть внутренний сервер компании, содержащий пакеты, укажите URL этого сервера.

Установка/Разработка

Чтобы установить ваше приложение (желательно в virtualenv), просто запустите скрипт setup.py с параметром install. Он установит ваше приложение в папку site-packages виртуальной среды, а также загрузит и установит все зависимости:

$ 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/0.12.x/patterns/distribute/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API