A mio parere, la risposta corretta è NO ma troverete alcune distribuzioni che installano i test. I test non dovrebbero essere installati ma dovrebbero essere inclusi nella distribuzione di origine. Secondo me, in un mondo ideale, testare i pacchetti installati dovrebbe essere un'attività eseguita dal gestore pacchetti (pip) e la directory site-packages
non dovrebbe essere inquinata da sorgenti di test.
Ho recentemente studiato questo argomento e ho raccolto informazioni da varie fonti e ho trovato diversi modi per strutturare la gerarchia di directory/pacchetti di una distribuzione che contiene sia le fonti che i test di libreria. La maggior parte di queste strutture sembra essere obsoleta e sono state inventate come tentativi di aggirare i set di funzionalità incomplete dei vecchi sistemi di distribuzione al momento. Sfortunatamente molte fonti online (blogposts/documentazione precedenti) stanno ancora pubblicizzando i metodi obsoleti, quindi è molto facile trovare un how-to/tutorial con ricerca online obsoleto.
Supponiamo che tu abbia una libreria denominata "my_lib" e desideri strutturare i sorgenti della tua distribuzione. Mostrerò due modi popolari e apparentemente superati per strutturare la tua distribuzione e un terzo modo che ho trovato per essere il più versatile. Il terzo metodo potrebbe anche essere obsoleto, ma quello è il migliore che conosco al momento di pubblicare questa risposta. ;-)
Metodo # 1
distribuzioni che (intenzionalmente o meno) installano i test di solito usano questo metodo.
gerarchia
+- my_lib
| +- __init__.py
| +- source1.py
| +- source2.py
| +- tests
| +- __init__.py
| +- test_1.py
| +- test_2.py
+- setup.py
Metodo # 2
I test non sono installati ma dovrebbero essere inclusi nella distribuzione di origine attraverso il file MANIFEST.in
.
gerarchia
+- my_lib
| +- __init__.py
| +- source1.py
| +- source2.py
+- tests
| +- __init__.py
| +- test_1.py
| +- test_2.py
+- setup.py
Metodo # 3 (preferisco questo.)
Questo è più o meno simile al metodo # 2 con un po 'di torsione (la src
dir).
gerarchia
+- src
| +- my_lib
| +- __init__.py
| +- source1.py
| +- source2.py
+- tests
| +- __init__.py
| +- test_1.py
| +- test_2.py
+- setup.py
setup() chiamata in setup.py
from setuptools import setup, find_packages
setup(
...
packages=find_packages('src'),
package_dir={'': 'src'},
...
)
MANIFEST.in
recursive-include tests *.py
test non essere installati ma saranno inclusi nella distribuzione di origine tramite il nostro MANIFEST.in
.
Nel caso del metodo # 3 si ha una directory src
che di solito contiene solo un singolo pacchetto che è la radice della libreria. Mettere il pacchetto my_lib
in un src
directory (directory e non un pacchetto in modo che non è necessario un src/__init__.py
) ha i seguenti vantaggi:
Fuori della parte superiore della mia testa, sarebbe utile per essere in grado di determinare che un pacchetto funziona/installato correttamente, soprattutto quando si distribuisce per diverse piattaforme e/o avere dipendenze di terze parti che possono o potrebbe non differire da versione a versione. –
Ciao Joel, la domanda che sto ponendo qui è specificamente sul perché avrebbe senso ** installare ** i test piuttosto che includerli nella distribuzione di origine. – scanny
'numpy'' scipy' 'pandas'' sympy' 'blaze'' numba' 'skimage' tutti hanno i test installati nei pacchetti del sito, per quello che vale – endolith