2012-05-29 7 views
13

Sto cercando di eseguire py.test sul mio pacchetto ma sta tentando di analizzare setup.py dalla directory principale del progetto anche se ho provato a escluderlo.ERRORE durante la raccolta di setup.py durante il tentativo di eseguire py.test?

Devo raccogliere i test dai file * .py perché le classi di test sono incluse nei moduli.

# setup.cfg 
[pytest] 
norecursedirs = .svn _build tmp* lib/third lib *.egg bin distutils setup.py 
python_files = *.py 

Eppure quando lo eseguo py.test che mi darà ERROR collecting setup.py che ho già escluso.

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/core.py:140: in setup 
>   raise SystemExit, gen_usage(dist.script_name) + "\nerror: %s" % msg 
E   SystemExit: usage: py.test [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] 
E    or: py.test --help [cmd1 cmd2 ...] 
E    or: py.test --help-commands 
E    or: py.test cmd --help 
E   
E   error: no commands supplied 

risposta

19

È possibile configurare l'opzione --ignore alla configurazione pytest.ini come questo forse:

addopts = --ignore=setup.py 

che dovrebbe aiutare se ci si trova nella directory principale e desidera py.test a ignora il file setup.py.

+0

Dannazione, significa che se avrò un altro 'setup.py' sarà anche incluso. Inoltre, tox non è in grado di cercare tox.ini nelle directory madri ?! – sorin

+1

Per evitare l'inclusione di altri file setup.py, penso che pytest.ini abbia bisogno di un modo per consentire di specificare posizioni esatte come --ignore = {inidir} /setup.py o così. – hpk42

2

Dalla documentazione (e il nome della variabile) Sembra norecursedirs salta solo directory, in modo da quando setup.py è un file, mettendolo in norecursedirs non ha alcun effetto.

http://pytest.org/latest/customize.html?highlight=norecursedirs#confval-norecursedirs

+0

Grazie, per rimarcare esso. Ancora questo non risolve il mio problema. Da questi assumerei che è impossibile impedire a 'py.test' di caricare' setup.py' se si desidera cercare '* .py'. Ancora l'errore appare perché 'py.test' sta provando ad eseguire' setup.py'. Forse c'è qualcosa che posso fare con setup.py per renderlo 'py.test' friendly. – sorin

0

In Jedi abbiamo risolto questo problema aggiungendo un file conftest.py con il contenuto di collect_ignore = ["setup.py"]. Questo rende il lavoro "magicamente".

IMHO py.test dovrebbe rendere più semplice ignorare setup.py, poiché si tratta di un caso di utilizzo molto tipico.

1

La documentazione pytest hanno la risposta sepolto via here. Mettere un file conftest.py nella directory principale del progetto che elenca i file che si desidera pytest ignorare:

Tuttavia, molti progetti avranno un setup.py che non vogliono essere importati. Inoltre, i file possono essere importati solo da una specifica versione di Python. Per tali casi è possibile definire dinamicamente i file per essere ignorato da elencandoli in un file conftest.py:


# content of conftest.py 
import sys 

collect_ignore = ["setup.py"]