На этом шаге мы рассмотрим особенности решения этой задачи.
Вы написали полезную библиотеку и хотите передать ее другим людям.
Если вы хотите начать распространение своего кода, первым делом вам нужно присвоить ему уникальное имя и подчистить структуру каталогов. Например, типичный пакет может выглядеть так:
projectname/
README.txt
Doc/
documentation.txt
projectname/
__init__.py
foo.py
bar.py
utils/
__init__.py
spam.py
grok.py
examples/
helloworld.py
. . .
Чтобы превратить пакет в нечто пригодное для распространения, сначала напишите файл setup.py, который выглядит так:
# setup.py from distutils.core import setup setup(name='projectname', version='1.0', author='Your Name', author_email='you@youraddress.com', url='http://www.you.com/projectname', packages=['projectname', 'projectname.utils'], )
Далее создайте файл MANIFEST.in, в котором перечислите файлы, которые не содержат исходный код, но которые вы хотите включить в ваш пакет:
# MANIFEST.in
include *.txt
recursive-include examples *
recursive-include Doc *
Убедитесь, что setup.py и MANIFEST.in лежат в каталоге высшего уровня вашего пакета. Когда вы их туда поместите, то сможете создать исходник для распространения, напечатав такую команду:
% bash python3 setup.py sdist
Это создаст файл projectname-1.0.zip или projectname-1.0.tar.gz, в зависимости от платформы. Если все это сработает, вы получите файл,
который можно передавать другим людям или загружать в Python Package Index.
Если у вас чистый код Python, написание setup.py вполне бесхитростно. Потенциальный подводный камень тут в том, что вы должны вручную перечислить каждый из подкаталогов, которые составляют пакет. Обычная ошибка тут - указание только каталога высшего уровня вашего пакета, а не всех подкомпонентов. Вот почему определение packages в setup.py производится с помощью списка: packages=['projectname, 'projectname.utils'].
Большинство программистов Python знает, что есть много сторонних инструментов для создания пакетов, таких как setuptools, distribute и т. д. Некоторые из них заменяют библиотеку distutils из стандартной библиотеки. Обратите внимание, что если вы опираетесь на эти пакеты, пользователи могут столкнуться с невозможностью установить ваше ПО до тех пор, пока не установят себе требуемый менеджер пакетов. Поэтому вы не ошибетесь, если выберете самое простое решение. Как минимум, убедитесь, что ваш код может быть установлен с помощью стандартной поставки Python 3. Дополнительные возможности можно поддерживать в качестве опции, которая пригодится тем, кому доступны дополнительные пакеты.
Упаковка и распространение кода, включающего написанные на C расширения, может быть заметно более сложным делом. Далее мы коснемся этих вопросов.
Со следующего шага мы начнем рассматривать сети и веб-программирование.