2015-04-25 30 views
9

Zrobiłem mój projekt z setuptools i chcę przetestować go z tox. Wymieniłem zależności w zmiennej i dodano do parametru setup() (tests_require i extras_require). Mój projekt musi zainstalować wszystkie zależności wymienione w tests_require, aby je przetestować, ale pip install nie instaluje ich.PIP instaluje zależności testowe dla tox od setup.py

próbowałem tego, ale to nie działa:

install_command = pip install {opts} {packages}[tests] 

Jak mogę zainstalować zależności testowych bez konieczności zarządzać wieloma listami zależnościami (to znaczy uwzględniając wszystkie zależności są wymienione w obu test_requirements.txt i zmienną tests_require)?

+1

Nie jestem pewien, czy potrafisz - wszystkie projekty, które widziałem z integracją "tox", mają tylko określony plik wymagań testowych i ustaw "deps = -r co_plik.txt" w "tox.ini". – jonrsharpe

+0

@jonrsharpe Po prostu nie chcę tworzyć pliku tekstowego deps. Jeśli to zrobię, muszę zarządzać dwiema listami dep. – item4

+0

Tak, rozumiem, dlaczego nie chcesz tego robić, i mówię ci, że * nie jestem pewien, czy możesz tego uniknąć *. Inną opcją jest odczytanie zależności testowych z pliku 'setup.py' zamiast ich kodowania; który zabierze Cię z powrotem na jedną listę DRY. – jonrsharpe

Odpowiedz

1

Co można zrobić, to mieć pojedynczy plik (zwany test_requirements.txt) oraz lista obecnie zależnościami testowych tak:

dnspython==1.12.0 
easydev==0.8.3 
enum34==1.0.4 
fabric==1.10.1 
... 

Następnie w setup.py, analizowania i przechowywania zawartości pliku na liście i przekazać, że lista do setup:

tests_require = [line.strip() for line in 
       open('test_requirements.txt') 
       if line.strip() and not line.strip().startswith('--')] 

setuptools.setup(
    ... 
    tests_require=tests_require, 
    ... 
) 
12

jakie osiąga to poprzez popełnienie lekkie nadużycie extra requirements. Byłaś prawie na miejscu, próbując składni dodatków, tylko te tests_require deps nie są automatycznie dostępne w ten sposób.

Z setup.py tak:

from setuptools import setup 

test_deps = [ 
    'coverage', 
    'pytest', 
] 
extras = { 
    'test': test_deps, 
} 

setup(
    # Other metadata... 
    tests_require=test_deps, 
    extras_require=extras, 
) 

Można wówczas uzyskać zależności testowych zainstalowany ze składnią dodatkami, na przykład z głównego katalogu projektu:

$ pip install .[test] 

Daj tę samą składnię Tox w tox.ini, nie ma potrzeby, aby ustawić domyślną install_command:

[testenv] 
commands = {posargs:pytest} 
deps = .[test] 

Teraz nie potrzeba do prowadzenia listy zależnościach w dwóch miejsca i są wyrażane tam, gdzie powinny być dla opublikowanego pakietu: w metadanych opakowania zamiast w plikach requirements.txt.

Wydaje się, że ten mały dodatek hack is not all that uncommon.