Я хотел бы получить совет по упаковке этого яйца и загрузке его в pypi. - PullRequest
2 голосов
/ 19 августа 2009

Я написал код, который я хотел бы упаковать как яйцо. Это моя структура каталогов:

src/
src/tests
src/tests/test.py # this has several tests for the movie name parser
src/torrent
src/torrent/__init__.py
src/torrent/movienameparser
src/torrent/movienameparser/__init__.py # this contains the code

Я бы хотел упаковать эту структуру каталогов как яйцо и также включить тестовый файл. Что я должен включить в файл setup.py, чтобы я мог иметь любое количество пространств имен и любое количество тестов?

Это первый открытый исходный код, которым я хотел бы поделиться. Хотя, возможно, я буду единственным, кто сочтет этот модуль полезным, я бы хотел загрузить его на pypi. Какую лицензию я могу использовать, что позволит пользователям делать с кодом то, что они хотят, без ограничений при распространении, модификациях?

Несмотря на то, что я планирую обновить это яйцо, я не хотел бы ни за что не отвечать (например, оказывать поддержку пользователям). Я знаю, что это может звучать эгоистично, но это мой первый открытый исходный код, поэтому, пожалуйста, потерпите меня. Нужно ли будет предоставить копию лицензии? Где я могу найти копию?

Спасибо, что прочитали все это.

Ответы [ 3 ]

6 голосов
/ 20 августа 2009

Я не буду вдаваться в обсуждение лицензирования, но обычно в файл исходного кода вашего пакета входит файл 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 с точки зрения пользователя.

3 голосов
/ 20 августа 2009

Было бы лучше распространять его как тарбол (.tar.gz), а не как яйцо. Яйца в основном предназначены для двоичного распространения, например, при использовании скомпилированных расширений Си. В дистрибутивах только с исходным кодом они представляют собой просто ненужную сложность.

Если вы просто хотите выбросить свой код в мир, лицензии MIT или BSD с 3 пунктами являются наиболее популярным выбором. Оба включают отказ от ответственности. Все, что вам нужно сделать, это включить основную лицензию в архив; как правило, «License.txt» или аналогичный. При желании вы можете добавить небольшое уведомление об авторских правах в каждый исходный файл; Я поощряю это, поэтому статус каждого файла очевиден даже без всего архива, но некоторые люди считают, что это слишком многословно. Это вопрос личных предпочтений.

Лицензия BSD доступна на Wikipdia , скопирована ниже:

Copyright (c) <year>, <copyright holder>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the <organization> nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY <copyright holder> ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0 голосов
/ 12 августа 2010

Включите файл ez_setup с веб-сайта setuptools и включите его в начало файла setup.py:

.
from ez_setup import use_setuptools
use_setuptools()

Этот скрипт - помощник для людей, у которых нет setuptools. Он загружает и устанавливает последнюю версию setuptools в системе, в которой не установлены setuptools.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...