Moim zdaniem właściwą odpowiedzią jest NIE, ale znajdziesz sporo dystrybucji, które instalują testy. Testy nie powinny być instalowane, ale powinny być zawarte w dystrybucji źródłowej. Moim zdaniem w idealnym świecie testowanie zainstalowanych pakietów powinno być zadaniem wykonywanym przez menedżera pakietów (pip), a katalog site-packages
nie powinien być zanieczyszczony źródłami testowymi.
Niedawno zbadałem ten temat i zebrałem informacje z różnych źródeł oraz znalazłem kilka różnych sposobów struktury hierarchii katalogów/pakietów dystrybucji, która zawiera zarówno źródła biblioteki, jak i testy. Większość tych struktur wydaje się być przestarzała i zostały wymyślone jako próby obejścia niekompletnych zestawów funkcji starszych systemów dystrybucji w tym czasie. Niestety wiele źródeł internetowych (starszych blogów/dokumentacji) wciąż reklamuje przestarzałe metody, więc bardzo łatwo jest znaleźć nieaktualne instrukcje dotyczące dystrybucji/samouczka dotyczące wyszukiwania online.
Załóżmy, że masz bibliotekę o nazwie "my_lib" i chcesz uporządkować źródła swojej dystrybucji. Pokażę dwa popularne i pozornie przestarzałe sposoby na uporządkowanie twojej dystrybucji i trzeci sposób, który uważam za najbardziej uniwersalny. Trzecia metoda może być również nieaktualna, ale jest to najlepsza, jaką znam, kiedy opublikować tę odpowiedź. ;-)
Sposób nr 1
Rozkłady że (świadomie lub nieświadomie) Instalacja testy zwykle używają tej metody.
hierarchia
+- my_lib
| +- __init__.py
| +- source1.py
| +- source2.py
| +- tests
| +- __init__.py
| +- test_1.py
| +- test_2.py
+- setup.py
Sposób nr 2
Testy nie są zainstalowane, ale powinny być one zawarte w dystrybucji źródłowej poprzez akt MANIFEST.in
.
hierarchia
+- my_lib
| +- __init__.py
| +- source1.py
| +- source2.py
+- tests
| +- __init__.py
| +- test_1.py
| +- test_2.py
+- setup.py
Sposób nr 3 (wolę ten.)
Jest to dość dużo podobna do Sposób nr 2 z małym skręcie (The src
dir).
hierarchia
+- src
| +- my_lib
| +- __init__.py
| +- source1.py
| +- source2.py
+- tests
| +- __init__.py
| +- test_1.py
| +- test_2.py
+- setup.py
setup() wywołanie w setup.py
from setuptools import setup, find_packages
setup(
...
packages=find_packages('src'),
package_dir={'': 'src'},
...
)
MANIFEST.in
recursive-include tests *.py
Testy nie będzie być zainstalowane, ale będą one zawarte w dystrybucji źródłowej poprzez naszą MANIFEST.in
.
W przypadku metody nr 3 masz katalog src
, który zwykle zawiera tylko jedną paczkę, która jest katalogiem głównym twojej biblioteki. Umieszczenie pakietu my_lib
do katalogu src
katalogu (a nie pakiet, więc nie potrzebują src/__init__.py
) ma następujące zalety:
Off szczycie mojej głowy, wskazane byłoby, aby być w stanie określić, że pakiet działa/zainstalowany prawidłowo, zwłaszcza gdy się dystrybucją do różnych platform i/lub mają współzależności osób trzecich, które mogą lub nie może różnić się od wersji do wersji. –
Cześć Joel, pytanie, które tu zadam, dotyczy właśnie tego, dlaczego sensowne może być ** instalowanie ** testów, a nie tylko włączanie ich do dystrybucji źródłowej. – scanny
'numpy'' scipy' 'pandy'' sympatyczne' 'blaze'' numba'' skimage' wszystkie mają testy zainstalowane w pakietach serwisowych, dla czego warto – endolith