Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-02-28

distribution

Про 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

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)