2009-08-19 3 views
2

Ich habe einen Code geschrieben, den ich gerne als Ei verpacken möchte. Dies ist meine Verzeichnisstruktur:Ich hätte gerne einen Ratschlag, dies als Ei zu verpacken und auf pypi hochzuladen.

Ich möchte diese Verzeichnisstruktur als Ei verpacken und die Testdatei auch einschließen. Was sollte ich in die Datei setup.py aufnehmen, damit ich beliebig viele Namespaces und beliebig viele Tests haben kann?

Dies ist der erste Open-Source-Code, den ich teilen möchte. Auch wenn ich wahrscheinlich der einzige bin, der dieses Modul nützlich finden wird, möchte ich es auf hochladen. Welche Lizenz kann ich verwenden, damit Benutzer mit dem Code tun können, was sie wollen, keine Einschränkungen bei Umverteilung, Änderungen?

Obwohl ich plane, dieses Ei zu aktualisieren, möchte ich nicht für irgendetwas verantwortlich sein (z. B. Unterstützung für Benutzer). Ich weiß, dass dies egoistisch klingen mag, aber dies ist mein erster Open-Source-Code, also bitte ertragen Sie mit mir. Muss ich eine Kopie der Lizenz bereitstellen? Wo könnte ich eine Kopie finden?

Danke für das Lesen all dies.

+0

Sie sollten dies wahrscheinlich mit 'setuptools' und 'distutils' kennzeichnen. –

+0

Ich habe die Tags aktualisiert. Vielleicht wird es jetzt mehr Interesse erzeugen :) – Geo

Antwort

3

Es wäre besser, es als Tarball zu verteilen (.tar.gz), nicht als Ei. Eier werden hauptsächlich für die Binärverteilung verwendet, z. B. wenn kompilierte C-Erweiterungen verwendet werden. In reinen Quellenverteilungen sind sie nur unnötige Komplexität.

Wenn Sie nur Ihren Code in die Welt hinauswerfen möchten, sind die MIT- oder 3-Klausel-BSD-Lizenzen die beliebteste Wahl. Beide schließen Haftungsausschlüsse ein. Sie müssen lediglich die Hauptlizenz in den Tarball aufnehmen; typischerweise als "License.txt" oder ähnlich. Optional können Sie jeder Quelldatei eine kleine Copyright-Benachrichtigung hinzufügen. Ich ermutige dies, so dass der Status jeder Datei auch ohne das gesamte Archiv offensichtlich ist, aber manche Leute denken, dass das zu ausführlich ist. Es ist eine Frage der persönlichen Präferenz.

Die BSD-Lizenz ist auf Wikipdia vorhanden, kopiert unter:

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. 
6

ich in Lizenz Diskussion hier nicht bekommen, aber es ist typisch Lizenzdatei an der Wurzel des Pakets Quellcode enthält, zusammen mit andere übliche Dinge wie README, etc.

Ich organisiere normalerweise Pakete auf die gleiche Weise wie sie auf dem Zielsystem installiert werden. Das Standardpaket Layout Konvention wird here. erklärt

Zum Beispiel, wenn mein Paket ‚torrent‘ ist, und es hat ein paar Unterpakete wie ‚Tests‘ und ‚util‘, hier ist die Quelle Baum aussehen würde:

 
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/... 

Dieses 'torrent/torrent'-Bit scheint überflüssig zu sein, aber dies ist der Nebeneffekt dieser Standardkonvention und der Funktionsweise von Python-Importen.

Hier ist die sehr minimalistisch setup.py (mehr Infos auf how to write the setup script):

#!/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'] 
) 

eine Quelle Distro zu erhalten, dann würde ich tun:

$ cd workspace/torrent 
$ ./setup.py sdist 

Diese Distribution (dist/torrent-0.1.tar.gz) wird nutzbar sein allein, indem Sie es einfach auspacken und setup.py install ausführen oder easy_install von setuptools Toolkit verwenden. Und Sie müssen nicht mehrere "Eier" für jede unterstützte Version von Python erstellen.

Wenn Sie wirklich ein Ei brauchen, müssen Sie eine Abhängigkeit von setuptools zu Ihrer setup.py hinzufügen, die einen zusätzlichen Unterbefehl bdist_egg einführt, der Eier erzeugt.

Aber es ist ein weiterer Vorteil der setuptools neben seinen Eiproduzierenden-Qualitäten, entfernt es die Notwendigkeit, Pakete in Ihrem setup.py mit einer schönen Helferfunktion find_packages aufzuzählen:

#!/usr/bin/env python 

from setuptools import setup, find_packages 

setup(name='torrent', 
     version='0.1', 
     description='would be nice', 
     packages=find_packages() 
) 

Dann ein „Ei“ zu erhalten ich werde tun:

$ cd workspace 
$ ./setup.py bdist_egg 

... und es wird mir das Ei Datei geben: dist/torrent-0.1-py2.6.egg

Beachten Sie die py2.6 Suffix, das ist, weil ich auf meiner Maschine Python 2.6 habe. Wenn Sie viele Leute zufriedenstellen möchten, müssten Sie für jede wichtige Python-Veröffentlichung ein Ei veröffentlichen. Du willst keine Horden von Python 2.5-Leuten mit Äxten und Speeren vor deiner Haustür, oder?

Aber Sie müssen kein Ei bauen, können Sie immer noch sdist Unterbefehl verwenden.

Aktualisiert: Hier ist another useful page in Python-Dokumentation, die Distutils aus Benutzersicht einführt.

0

Fügen ez_setup Datei aus setuptools website und umfassen an der Spitze Ihres setup.py:

from ez_setup import use_setuptools 
use_setuptools() 

Dieses Skript ein Helfer für Leute, die Setuptools nicht haben. Es lädt und installiert die neueste Version von setuptools auf dem System, auf dem keine setuptools installiert sind.

Verwandte Themen