Private Releases

sdistmaker

Mit sdistmaker gibt es eine einfache Möglichkeit, sdist tarballs in svn-Repositories bereitzustellen.

sdistmaker übernimmt folgende Aufgaben:

  1. Es durchsucht die tags-Verzeichnisse Ihres svn-Repository. Dabei kann sdistmaker auch auf bestimmte Bereiche Ihres Repository eingeschränkt werden.
  2. Für jeden Tag erstellt es eine source distribution mit python setup.py sdist.
  3. Die source distribution wird anschließend in einem Unterverzeichnis Ihres Projekts gespeichert, ähnlich wie in http://pypi.python.org/simple/.

Installation

sdistmaker lässt sich einfach installieren mit:

# easy_install sdistmaker

Anschließend stehen Ihnen zwei Skripte zur Verfügung:

make_sdist
ist im wesentlichen für Testzwecke gedacht. Dabei können Sie unter Angabe der tag-URL und des Zielverzeichnisses einzelne Releases erstellen.
sdists_from_tags
Es durchsucht die svn-Struktur nach geeigneten tags-Verzeichnissen und erstellt aus diesen entsprechende Releases.

Konfiguration

Zunächst sollte sdistmaker seine eigene Basiskonfiguration erstellen mit:

$ sdists_from_tags --print-example-defaults

Speichern Sie die Ausgabe in eine Konfigurationsdatei, z.B. defaults.py.

Anschließend können Sie diese Konfiguration verwenden mit:

$ sdists_from_tags --defaults-file=defaults.py

Schließlich werden Sie sdists_from_tags regelmäßig aufrufen wollen, entweder als Cron-Job, svn post-commit-hook etc.

Verwendung in Buildout

sdistmaker kann mit Buildout folgendermaßen verwendet werden:

[buildout]
parts = sdists

[sdists]
recipe = zc.recipe.egg
eggs = sdistmaker
scripts = sdists_from_tags
# arguments =
#      defaults_file='${buildout:directory}/defaults.py'

Dabei wird die defaults.py-Datei auf dieselbe Weise erzeugt wie oben beschrieben.

sdistmaker und PyPI

Üblicherweise kann immer nur ein Index für easy_install angegeben werden. Um nun neben dem sdistmaker-Index auch den von PyPI verwenden zu können, kann z.B. eine Redirect-Anweisung definiert werden, falls im sdistmaker-Index nichts gefunden wird:

# Allow indexing
Options +Indexes
IndexOptions FancyIndexing VersionSort

# Start of rewriterules to use our own var/private/* packages
# when available and to redirect to pypi if not.
RewriteEngine On
# Use our robots.txt:
RewriteRule ^/robots.txt - [L]
# Use our apache's icons:
RewriteRule ^/icons/.* - [L]
# We want OUR index.  Specified in a weird way as apache
# searches in a weird way for index.htm index.html index.php etc.
RewriteRule ^/index\..* - [L]

# Use our var/private/PROJECTNAME if available,
# redirect to pypi otherwise:
RewriteCond /path/on/server/var/private/$1 !-f
RewriteCond /path/on/server/var/private/$1 !-d
RewriteRule ^/([^/]+)/?$ http://pypi.python.org/pypi/$1/ [L]

# Use our var/private/PROJECTNAME/project-0.1.tar.gz if available,
# redirect to pypi otherwise:
RewriteCond /path/on/server/var/private/$1 !-d
RewriteRule ^/([^/]+)/([^/]+)$ http://pypi.python.org/pypi/$1/$2 [L]

Verwenden des Index

Dieser Index kann nun sowohl mit EasyInstall als auch mit Buildout aufgerufen werden:

EasyInstall

$ easy_install -i http://packages.veit-schiele.de/ vs.event
Buildout

Sie können den Index in der Buildout-Konfigurationsdatei angeben:

[buildout]
index = http://packages.veit-schiele.de/
parts =
    …

gocept.zestreleaser.customupload

gocept.zestreleaser.customupload ist ein Plugin für zest.releaser, das das Hochladen erstellter Eggs via Secure copy (SCP) zu vorher konfigurierten Zielen erlaubt.

Um es zu verwenden, kann in ~/.pypirc z.B. folgendes konfiguriert werden:

[gocept.zestreleaser.customupload]
vs = download.veit-schiele.de:/var/www/packages
example = download.veit-schiele.de:/var/www/example

Falls das veröffentlichte Paket mit einem der Schlüsselwörter (vs, example) beginnt, werden Sie gefragt, ob das Egg auf den angegebenen Server hochgeladen werden soll.