Про Python, пакеты
и дистрибуцию.
В прошлый раз
я
показал, как код на Python оформить в пакет
(package). Если совсем кратко, то пакет —
это папка в которой есть маркерный файл
__init__.py
Продолжим.
Сегодня я покажу как пакет Python оформить
в виде дистрибутива, опять же, на примере
https://github.com/vasnake/transbot/tree/package
ОК, перехожу
в папку проекта:
pushd ~/projects/translit.bot
активирую virtualenv:
source env/bin/activate
Внутри папки проекта у меня есть
папка-пакет и три файла:
translitbot/ CHANGELOG COPYING README.rst
Папка translitbot — это пакет, остальное —
сопроводительная документация.
Чтобы сделать
дистрибутив, в папку проекта надо
положить еще один файл — setup.py:
from setuptools import setup with open('README.rst', 'r') as infile: long_description = infile.read() setup( name = 'translitbot', description = "XMPP chat bot for translit service", long_description = long_description, keywords = "XMPP GTalk chat bot translit", url = 'https://github.com/vasnake/transbot', download_url = 'https://github.com/vasnake/transbot/archive/master.zip', version = "0.1.2", license = 'GPLv3', author = "Valentin Fedulov", author_email='vasnake@gmail.com', packages = ['translitbot'], scripts = [], install_requires = ['dnspython', 'trans', 'xmpppy'], classifiers = [ # https://pypi.python.org/pypi?%3Aaction=list_classifiers 'Development Status :: 3 - Alpha', 'Intended Audience :: Education', 'Topic :: Communications :: Chat' ], zip_safe = False ) |
Можно считать,
что дистрибутив у нас в кармане.
Параметры в
setup.py вполне очевидные, разве, что особое
внимание следует уделить двум:
packages = ['translitbot'], install_requires = ['dnspython', 'trans', 'xmpppy'],
первый — список моих пакетов для
включения в дистрибутив. Второй, это
зависимости — список пакетов, которые
необходимо установить перед установкой
translitbot.
Кстати, о
зависимостях. Использование песочницы
virtualenv дает дополнительный бонус,
возможность получить список использованных
в проекте пакетов:
pip freeze > requirements.txt
После чего можно использовать полученный
файл requirements.txt для воспроизведения
среды:
pip install -r requirements.txt
Теперь, когда
есть setup.py, можно проделать некоторые
интересные и нужные фортели.
Проверить
сетап:
python setup.py check
Собрать
дистрибутив типа sources:
python setup.py sdist
После чего проверить содержимое файла
dist\translitbot-0.1.2.tar.gz на предмет — а вдруг
чего не хватает?
Установить
пакет в режиме разработки:
python setup.py develop
в этом режиме в список доступных пакетов
записываются только ссылки, что дает
возможность править исходный код и тут
же использовать пакет, без повторной
переустановки после каждой правки.
В отличие от
режима разработки, установка:
python setup.py install
вписывает пакет внутрь общего списка
пакетов среды, в нашем случае — песочницы
env.
После создания
дистрибутива sdist можно/нужно проверить,
как он устанавливается в чистой песочнице
(в отдельной, временной папке):
valik@snafu:~/t$ virtualenv env valik@snafu:~/t$ source env/bin/activate (env)valik@snafu:~/t$ pip install ~/projects/translit.bot/dist/translitbot-0.1.2.tar.gz
Эта проверка показала, что пакет xmpppy
невозможно установить, лог:
Downloading/unpacking xmpppy (from translitbot==0.1.2) Could not find a version that satisfies the requirement xmpppy (from translitbot==0.1.2) (from versions: 0.5.0rc1) Cleaning up... No distributions matching the version for xmpppy (from translitbot==0.1.2)
Эта проблема не связана с моим дистрибутивом
(во всяком случае — не напрямую) и
решается так:
wget http://downloads.sourceforge.net/project/xmpppy/xmpppy/0.5.0-rc1/xmpppy-0.5.0rc1.tar.gz pip install ./xmpppy-0.5.0rc1.tar.gz
После чего можно повторить установку
pip install ~/projects/translit.bot/dist/translitbot-0.1.2.tar.gz
На этот раз — успешно.
Думаю, на
сегодня достаточно. В следующий раз
рассмотрим: зачем в дистре нужны
setup.cfg, manifest.in и как выложить свой дистр
на PyPI.
Сцылки по теме:
original post http://vasnake.blogspot.com/2014/01/distribution.html
Комментариев нет:
Отправить комментарий