[Python] un saluto e parto subito con una domanda...

Esalando Prassi alessandro.pisa a katamail.com
Sab 5 Mar 2016 20:10:08 CET


2016-03-05 14:36 GMT+01:00 Davide Olianas <davide a davideolianas.com>:
> Ciao a tutti,
>
> è da un pezzo che uso python ma solo ora mi è venuto in mente di cercare una
> maling list italiana :D
>

Benvenuto,
     porta rispetto alla netiquette che qui c'è gente che se la lega
al dito peggio del padrino...

> Allora partirei con due domande
>
> 1) Perché leggo che può essere conveniente inserire gli unit test dentro il
> package? Mi sfugge il senso. Se a una persona serve solo usare il pacchetto,
> cosa se ne fa dei test? Se invece vuole modificarlo, comunque va in cerca
> del sorgente, completo di test...no?
>

Non te lo ordina il dottore di attaccarci pure i test, ma i test sono
anche documentazione, vuoi rilasciare un pacchetto senza
documentazione?
Finché tutto va bene ok, ma quando le cose non funzionano e c'è da
sbirciare il codice, leggere i test può dare grosse indicazioni,
soprattutto per chi non ha mai usato il tuo prodotto prima.

> 2) Mi confermate che in setup.py install_requires dovrebbe contenere solo i
> nomi delle dipendenze senza specificare le versioni con cui ho testato il
> codice

Quasi! In alcuni casi vuoi specificare delle versioni per far emergere
immediatamente problemi di (retro)compatibilità.

> cosa da fare invece in requirements.txt?
>

Non proprio... in teoria i requirements non è detto che siano necessari.

Ma qui rischi di farmi scatenare l'inferno...

Diciamo che va a gusti, si può usare un altro file con requirements
diversi/aggiuntivi:
 - https://github.com/getnikola/nikola/blob/master/requirements-tests.txt
(nota il -r requirements-extra.txt all'inizio che estende i
requirements...), c'è chi usa controllare i pacchetti necessari nel
setup.py con tests_requires:
 - https://github.com/getnikola/nikola/blob/master/setup.py#L146
oppure si può defire un extras_require:
 - https://github.com/getnikola/nikola/blob/master/setup.py#L38
 - https://github.com/getnikola/nikola/blob/master/setup.py#L145

Probabile che per qualcuno di queste extra keywords nel setup.py
funzionino solo se richiedi che il tuo pacchetto dipenda da
setuptools.
Magari qualcuno ne sa di più e ci chiarisce le idee :)

Nota che il pacchetto che ti ho mostrato (Nikola) è fatto e usato da
gente in gamba.
Come vedi usa sia i requirements che il setup.py, in maniera
ridondante e usando dei workaround un po' sui generis.

Probabilmente lo fa per essere accessibile a tutte le scuole di pensiero, boh!
In ogni caso a me tutto quel codice nel setup.py non garba tantissimo.
Questo giusto per farti capire che la corretta gestione dei conflitti
di versione non è una scienza esatta (e non solo in Python... chiedere
a chi usa npm & c.).
Anzi, forse è più alchimia...

Pensa che Nikola è pure un "pacchettino".
Gli sviluppatori di Plone usano uno strumento aggiuntivo (zc.buildout)
per fare rilasci ripetibili.
C'è però da dire che Plone è uno tra i progetti open source scritti in
Python con il maggior numero di dipendenze (forse quello che ne ha di
più?).

Detto questo ti consiglio di andare avanti con l'approccio che ti
risulta più semplice/gestibile ma non te ne innamorare.
Finché fa quello che ti serve o che non trovi un metodo che ti
convince di più vai avanti con quello.
Se poi devi condividere il codice con qualcuno, cerca di trovare un
punto d'accordo, tenendo ben presente che il mondo del software è
pieno di manichei.

In bocca al lupo!
-- 
@ale_pisa - http://ale-rt.github.io - http://alepisa.blogspot.com -
https://it.linkedin.com/in/apisa


Maggiori informazioni sulla lista Python