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

2014-01-29

Package

Есть мнение, что если ты пишешь на Python программу длиннее 100 строк, то следует оформить ее как пакет (package).

Покажу на примере (https://github.com/vasnake/transbot) как это сделать. Операционная система – Linux, инструмент – консоль.

Делай раз: подбери для пакета имя.
На https://pypi.python.org/pypi с помощью поиска я определил, что имя «translitbot» пока не занято. ОК, теперь занято.

Делай два: папка для файлов проекта.
mkdir ~/projects/translit.bot; pushd ~/projects/translit.bot

Делай три: изолированная песочница – virtualenv.
virtualenv --no-site-packages env
source env/bin/activate

Делай четыре: минимальная документация по проекту. Создал (пока пустые) файлы
CHANGELOG
COPYING
README.rst
в папке проекта (~/projects/translit.bot).

Делай пять: папка пакета – это просто папка
mkdir translitbot

Делай шесть: папка превращается в пакет. Для этого необходимо добавить файл (можно пустой)
translitbot/__init__.py
На этом можно было бы и остановится, ибо пакет уже готов.
Но лучше добавить еще файл
translitbot/__main__.py
Который позволяет вызывать пакет как программу, набрав в папке проекта команду
python -m translitbot
Чтобы это работало, в файл __main__.py я поместил такой код:
#!/usr/bin/env python
# -*- mode: python; coding: utf-8 -*-
from translitbot.translit_xmpp_bot import main
main()
Очевидно, у меня в пакете есть модуль (файл) translit_xmpp_bot.py в котором есть функция main, пусть это останется за скобками.

Вот и все, что необходимо для построения пакета Python. Теперь в него можно добавлять модули и подпакеты по необходимости.

Как из пакета сделать дистрибутив (distribution), как поместить пакет в PyPI для публикации и использования в других проектах – я расскажу в следующий раз.

Сцылки по теме:



original post http://vasnake.blogspot.com/2014/01/package.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)