Сборка python-пакета
Пару лет тому назад я уже использовал setuptools. Прошло время и мне снова понадобились его услуги, да вот вспомнить все сразу не получилось. Это небольшая шпаргалка о том как можно быстро реализовать создание пакета для собственного модуля Python-а.
Иерархия файлов проекта
.
├── gunicorn.conf.py
├── nightbook
│ ├── database.py
│ ├── __init__.py
│ ├── static
│ │ ├── bootstrap
│ │ │ ├── css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ ├── bootstrap-responsive.css
│ │ │ │ └── bootstrap-responsive.min.css
│ │ │ ├── img
│ │ │ │ ├── glyphicons-halflings.png
│ │ │ │ └── glyphicons-halflings-white.png
│ │ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ └── bootstrap.min.js
│ │ ├── css
│ │ │ └── default.css
│ │ ├── images
│ │ │ ├── bootstrap.jpg
│ │ │ └── vim.png
│ │ ├── js
│ │ │ └── jquery-1.10.1.min.js
│ │ └── style.css
│ ├── templates
│ │ ├── base
│ │ │ └── base.html
│ │ └── index.html
│ ├── utils.py
│ └── views
│ ├── catalogs.py
│ ├── general.py
│ ├── __init__.py
│ └── post.py
└── conf.py
Это пример, потому упростим дерево файлов проекта.
Описываем метаданные
На описание кода время тратить не буду, он достаточно понятен. Создаем в корне два файла setup.py и MANIFEST.in:
setup.py
from setuptools import setup, find_packages
def main():
setup(
name='nightbook',
version='0.0.1a',
packages=find_packages(),
long_description='Web blog on flask and mongodb',
install_requires=['Flask', 'tornado', 'pymongo', 'redis', 'Markdown', 'mdxflavours', 'PyRSS2Gen', 'pytils'],
include_package_data = True,
)
if name == 'main':
main()
MANIFEST.in
recursive-include nightbook/static *
recursive-include nightbook/templates *
Стоит заметить что для функции setup() необходимо использовать параметр include_package_data = True. Только так ваши дополнительные файлы, описанные в MANIFEST.in, могут быть установлены вместе с пакетом.
Использование пакета
Собрать пакет
python setup.py sdist
Установить пакет
pip install dist/nightbook-0.0.1a.tar.gz
P.S.
Статья маленькая, а тема огромная. Я не претендовал на подробный экскурс. Цель создать шпаргалку для себя и для моих знакомых. Собственно закавыкой стало размещение вспомогательных файлов. А мой старый сценарий оказался сильно страшным.
Кто захочет копнуть глубже может гуглить. Впереди создание своих репозиториев дистрибутива модуля и публикации его в PyPI. Удачи!