Я не буду вдаваться в обсуждение лицензирования, но обычно в файл исходного кода вашего пакета входит файл LICENSE, а также другие обычные вещи, такие как README и т. Д.
Обычно я организовываю пакеты так же, как они будут установлены в целевой системе. Стандартное расположение макета объясняется здесь .
Например, если мой пакет 'torrent' и в нем есть пара подпакетов, таких как 'tests' и 'util', вот дерево исходного кода будет выглядеть так:
workspace/torrent/setup.py
workspace/torrent/torrent/__init__.py
workspace/torrent/torrent/foo.py
workspace/torrent/torrent/bar.py
workspace/torrent/torrent/...
workspace/torrent/torrent/tests/__init__.py
workspace/torrent/torrent/tests/test.py
workspace/torrent/torrent/tests/...
workspace/torrent/torrent/util/__init__.py
workspace/torrent/torrent/util/helper1.py
workspace/torrent/torrent/util/...
Этот бит torrent / torrent кажется избыточным, но это побочный эффект этого стандартного соглашения и того, как работает импорт Python.
Вот очень минималистичный setup.py
(подробнее о как написать скрипт установки ):
#!/usr/bin/env python
from distutils.core import setup
setup(name='torrent',
version='0.1',
description='would be nice',
packages=['torrent', 'torrent.tests', 'torrent.util']
)
Чтобы получить исходный дистрибутив, я бы сделал:
$ cd workspace/torrent
$ ./setup.py sdist
Этот дистрибутив (dist/torrent-0.1.tar.gz
) будет использоваться сам по себе, просто распаковав его и запустив setup.py install
или используя easy_install
из setuptools
toolkit. И вам не нужно будет делать несколько «яиц» для каждой поддерживаемой версии Python.
Если вам действительно нужно яйцо, вам нужно будет добавить зависимость к setuptools
к вашему setup.py
, которая введет дополнительную подкоманду bdist_egg
, которая генерирует яйца.
Но есть и еще одно преимущество setuptools
, помимо его способности производить яйца, оно устраняет необходимость перечисления пакетов в вашем setup.py
с помощью хорошей вспомогательной функции find_packages
:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(name='torrent',
version='0.1',
description='would be nice',
packages=find_packages()
)
Затем, чтобы получить «яйцо», я сделаю:
$ cd workspace
$ ./setup.py bdist_egg
... и это даст мне файл яйца: dist/torrent-0.1-py2.6.egg
Обратите внимание на суффикс py2.6
, потому что на моей машине установлен Python 2.6. Если вы хотите угодить многим людям, вам нужно будет публиковать яйцо для каждого основного выпуска Python. Вам не нужны орды Python 2.5 с топорами и копьями у вашего порога?
Но вам не нужно строить яйцо, вы все равно можете использовать подкоманду sdist
.
Обновлено: Вот еще одна полезная страница в документации Python, которая представляет Distutils
с точки зрения пользователя.