2015-04-25 40 views
9

Ho creato il mio progetto con setuptools e voglio testarlo con tox. Ho elencato le dipendenze in una variabile e aggiunto al parametro setup() (tests_require e extras_require). Il mio progetto deve installare tutte le dipendenze elencate in tests_require per testare ma pip install non le sta installando.pip installa le dipendenze di test per tox da setup.py

Ho provato questo, ma non ha funzionato:

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

Come posso installare le dipendenze di test senza dover gestire più elenchi di dipendenza (cioè avente tutte le dipendenze elencate sia test_requirements.txt e la variabile tests_require)?

+1

Non sono sicuro che sia possibile: tutti i progetti che ho visto con l'integrazione 'tox' hanno solo uno specifico file di requisiti di test e impostano' deps = -r whatever_file.txt' in 'tox.ini'. – jonrsharpe

+0

@jonrsharpe voglio solo fare nessun file di testo deps. Se lo faccio, devo gestire due liste di deps. – item4

+0

Sì, capisco perché non vuoi farlo, e ti sto dicendo che * Non sono sicuro che tu possa evitarlo *. L'altra opzione è quella di leggere le dipendenze di test dal file in 'setup.py' piuttosto che codificarle; che ti riporta a un singolo elenco DRY. – jonrsharpe

risposta

1

Che cosa si può fare è avere un unico file (denominato test_requirements.txt) e la lista fuori le dipendenze di prova in questo modo:

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

Poi, nel setup.py, analizzare e memorizzare il contenuto del file in un elenco e pass che elenco per 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

ho raggiunto questo commettendo un lieve abuso di extra requirements. Stavi quasi provando la sintassi degli extra, solo che i deps tests_require non sono automaticamente disponibili in quel modo.

Con un setup.py come questo:

from setuptools import setup 

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

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

È possibile quindi ottenere le dipendenze di prova installato con la sintassi extra, per esempio dalla directory principale del progetto:

$ pip install .[test] 

dare quella stessa sintassi per Tox in tox.ini, nessuna necessità di regolare l'impostazione predefinita install_command:

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

Ora non c'è bisogno di mantenere la lista delle dipendenze in due luoghi, e sono espressi dove dovrebbero essere per un pacchetto pubblicato: nei metadati della confezione invece dei file requirements.txt.

Sembra questo piccolo extra mod is not all that uncommon.

Problemi correlati