Nightbook

Сборка 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. Удачи!