Создание дистрибутива программы в python

python logo



Заметка повествует об этапе создания дистрибутива программы на языке python. Что под этим подразумевается? Допустим, вам крайне необходимо передать свою программу заинтересованным в ней лицам. Что будет содержать такая программа? Скорее всего, в ней будут присутствовать библиотечные модули, пакеты и, конечно, файл README или иная документация. Как правильно создать дистрибутив такой программы? Вот об этом и поговорим.



Примерная структура программы:

spam ├── Documentation.txt - документация ├── libspam.py        - одиночный библиотечный модуль ├── README.txt        - описание пакета/установки ├── runspam.py        - модуль запуска программы └── spampkg           - пакет     ├── bar.py        - модуль     ├── foo.py        - модуль     └── __init__.py

Не забудьте добавить в каждый пакет программы файл __init__.py для указания того, что данный подкаталог является пакетом. Файл __init__.py может быть пустым, а может содержать программный код, выполняющий инициализацию пакета. 
После подготовки каталога, нужно создать файл setup.py на самом верхнем уровне и поместить в него код:


# setup py from distutils.core import setup
setup(name = 'spam',     version = '1.0',     py_modules = ['libspam'],     packages = ['spampkg'],     scripts = ['runspam.py'], )

где
py_modules - список всех файлов одиночных модулей
packages - список всех каталогов пакетов
scripts - список файлов сценариев
Если какого-то из указанных компонентов нет в программе, он может быть опущен.
Полный перечень:
name - имя пакета
version - номер версии пакета
author - кто является авором
author_email - электронная почта автора
maintainer - кто сопровождает пакет
maintainer_email - электронная почта мейнтейнера
url - сайт программы
description - краткое описание пакета
long_description - полное описание пакета
download_url - адрес, откуда можно загрузить пакет
classifiers - список строк классификаторов

Теперь займёмся созданием дистрибутива. Для этого, находясь в каталоге с программой,  введите в командной строке:
$ python setup.py sdist

В результате в текущем каталоге появится файл MANIFEST и подкаталог с именем dist, в котором и будет находиться архивный файл для установки вашей программы.
Например:

$ ls dist
spam-1.0.tar.gz

Для установки программы из созданного вами дистрибутива, пользователю нужно лишь разархивировать полученный пакет и установить саму программу. 
$ tar xvf  spam-1.0.tar.gz
$ cd spam-1.0/
$ python setup.py install

  • Создание двоичного дистрибутива

Иногда может потребоваться создать двоичный дистрибутив. Например, если приложение содержит "платформозависимые" компоненты. В таком случае следует использовать команду bdist. Например:
$ python setup.py bdist

Теперь все файлы с расширением .py будут скомпилированы (.pyc-файлы).
Таким образом можно создать исполняемый exe-файл для Windows. Из командной строки Windows для этого достаточно выполнить:
python setup.py bdist wininst
После запуска подобного файла в Windows  откроется диалог мастера установки. У данного подхода имеется лишь один недостаток: сам интерпретатор python должен быть установлен на машине пользователя. Чтобы этого не требовалось, используйте py2exe.
py2exe можно забрать с sourceforge. К сожалению, на момент написания поста версия python3 ещё не поддерживается. 
Для этой утилиты нам нужно немного изменить наш файл setup.py:


from distutils.core import setup import py2exe
setup(     windows=[{"script":"spam.py"}],     options={"py2exe": {"includes":["sip"]}}
)


Далее следуют нехитрые манипуляции:
setup.py py2exe

После этого, как и в случае с bdist, появятся две директории: build и dist, содержащие программу запуска, модули и различные библиотеки. Если вам нужно более подробно ознакомиться с py2exe, обратитесь к официальной документации проекта.


  • Сборка расширений, написанных на C/C++

Не секрет, что в python можно включать модули, написанные на C и C++. Питон является мощным и простым языком, но не может потягаться скоростью выполнения с компилируемыми языками программирования.  По этой причине иногда может потребоваться  использовать модули расширений на C.
Для этого рекомендуется использовать пакет distutils. Нам снова придётся изменить setup.py, дабы он подходил для решения поставленной задачи:

# setup py from distutils.core import setup, Extension
setup(name = 'spam',     version = '1.0',     py_modules = ['libspam.py'],     ext_modules = [         Extension("_spam",         ["pyspam.c", "spam.c"])     ]
)


где libspam.py - файл с высокоуровневым модулем на python,
pyspam.c, spam.c - исходные файлы на C, составляющие модуль расширения
Для сборки модуля нужно дать команду:
$ python setup.py build_ext --inplace

Так файлы с исходными текстами будут скомпилированы в разделяемую библиотеку. После компиляции модуль можно импортировать:
>>> import spam
или установить для общего пользования, используя команду python setup.py install, как уже было показано выше.
За более подробной информацией о совместном использовании Python и C/C++ идём сюда.





0 коммент.: (+add yours?)

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

Примечание. Отправлять комментарии могут только участники этого блога.