Personal tools
Come addomesticare i vostri pacchetti Python con due semplici tool

Asfidanken!

Jul 24, 2013

Come addomesticare i vostri pacchetti Python con due semplici tool

Introduzione a Check-manifest e Pyroma: due semplici moduli Pyton per semplificare e automatizzare la verifica del vostro pacchetto prima di pubblicarlo su Pypi

Qualche tempo fa il mio collega Andrea Cecchi, in uno dei suoi post, ha scritto una breve introduzione a zest.relaeser.
L’articolo spiega come semplificare e automatizzare il processo di rilascio di un pacchetto Python (egg).

Proseguendo il cammino da lui intrapreso, vorrei suggerire altri due moduli a mio avviso molto utili: Check-manifestPyroma da aggiungere a zest.releaser.

Il loro compito è migliorare ulteriormente il processo di pubblicazione introducendo una serie di test qualitativi.

Check-manifest

Il file Manifest è un template da inserire tra i vostri sorgenti; serve a indicare a sdist (il tool automatico per la generazione di pacchetti Python) cosa includere nella propria distribuzione.

Check-manifest, come il nome stesso suggerisce, si occupa di verificare la presenza e la completezza del file Manifest.
Durante il processo di creazione del pacchetto può capitare, infatti, che il file non sia presente o che non sia sufficientemente completo; di conseguenza, una volta pubblicato su Pypi, il pacchetto può risultare "rotto".

L’installazione di Check-manifest è piuttosto semplice, come suggerito nella guida stessa, se ci si affida a pip basta dare il seguente comando:

$ pip install check-manifest

Per lanciare il test è sufficiente posizionarsi nella root del sorgente:

$ cd ~/src/my-package
$ check-manifest

Per la maggior parte dei casi io consiglio il parametro -u che aggiorna automaticamente il file:

$ check-manifest -u

Check-manifest se necessario può essere configurato per escludere alcuni file dall’inclusione. Per fare ciò, basta aggiungere alcune righe al file setup.cfg come segue:

[check-manifest]
ignore =
.file-to-exclude.xml

Nota: zest.releaser, dalla versione 3.32, controlla di default la presenza del file Manifest.in.
In ogni caso quindi, anche se non si installa Check-manifest, una verifica base viene ugualmente fatta.

Di seguito il codice che esegue il test (preso da github):

def check_recommended_files(data, vcs):
    """Do check for recommended files.
Returns True when all is fine.
"""
    main_files = os.listdir(data['workingdir'])
    if not 'setup.py' in main_files and not 'setup.cfg' in main_files:
        # Not a python package. We have no recommendations.
        return True
    if not 'MANIFEST.in' in main_files and not 'MANIFEST' in main_files:
        q = """This package is missing a MANIFEST.in file. This file is
recommended. See http://docs.python.org/distutils/sourcedist.html for
more info. Sample contents:
recursive-include main_directory *
recursive-include docs *
include *
global-exclude *.pyc
You may want to quit and fix this.
"""

Pyroma

Pyroma è un modulo Python che ha il compito di verificare la qualità dei pacchetti. Se lanciato da riga di comando nella root del vostro modulo, analizza il contenuto e assegna un punteggio da 0 a 10 in base all'aderenza o meno del vostro pacchetto ad alcune buone pratiche, tra le quali:

  • il pacchetto deve avere un nome, una versione e una descrizione, pena un rating pari a 0
  • il numero di versione deve essere una stringa. Un float funziona con distutils ma fallisce con molti altri tool
  • il numero di versione deve rispettare PEP386
  • la descrizione lunga deve superare i 100 caratteri
  • Pyroma converte, se possibile, la descrizione lunga in HTML garantendo quindi una formattazione più gradevole su Pypi
  • dovrebbero essere presenti campi metadata quali: classifiers, keywords, author, author_email, url and license
  • dovrebbe essere specificata la versione di Python supportata.
  • ...

Crea inoltre un breve report con fix e suggerimenti da apportare al sorgente quando e se necessario.

Conclusioni

Se si installano direttamente zest.releaser, Check-manifest e Pyroma quando si lancia il comando fullrelease tutti i controlli vengono eseguiti in batch.

Veramente consigliato :-)

$ fullrelease
INFO: Starting prerelease.
Do you want to run check-manifest? (Y/n)? listing source files under version control: 65 files and directories copying source files to a temporary directory building an sdist: my.package-1.0.0.tar.gz: 65 files and directories files in version control match files in the sdist Run pyroma on the package before tagging? (Y/n)?
Filed under: , ,
comments powered by Disqus