2015-04-25 11 views
9

Ich habe mein Projekt mit setuptools gemacht und ich möchte es mit tox testen. Ich habe Abhängigkeiten in einer Variablen aufgelistet und zu setup() Parameter (tests_require und extras_require) hinzugefügt. Mein Projekt muss alle in aufgelisteten Abhängigkeiten installieren, um sie zu testen, aber pip install installiert sie nicht.Pip installieren Test Abhängigkeiten für Tox von setup.py

habe ich versucht, diese aber es hat nicht funktioniert:

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

Wie kann ich Test Abhängigkeiten installieren, ohne dass mehrere Abhängigkeitslisten zu verwalten (d alle Abhängigkeiten sowohl test_requirements.txt und die tests_require Variable aufgelistet zu haben)?

+1

Ich bin mir nicht sicher, ob Sie können - alle Projekte, die ich mit "tox" Integration gesehen habe, haben nur eine spezielle Testanforderungen Datei und setzen 'deps = -r was_file.txt' in' tox.ini'. – jonrsharpe

+0

@jonrsharpe nur möchte ich keine Deps Textdatei machen. Wenn ich es mache, muss ich zwei Deps verwalten. – item4

+0

Ja, ich verstehe, warum du es nicht tun willst, und ich sage dir das * Ich bin mir nicht sicher, ob du es vermeiden kannst *. Die andere Möglichkeit besteht darin, Ihre Testabhängigkeiten von der Datei in 'setup.py' einzulesen, anstatt sie hart zu codieren. Das bringt Sie zurück zu einer einzigen DRY-Liste. – jonrsharpe

Antwort

1

Was können Sie tun, ist eine einzelne Datei haben (so genannte test_requirements.txt) und die Liste aus den Test Abhängigkeiten wie folgt:

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

Dann in setup.py, analysieren und speichern den Inhalt der Datei in einer Liste und übergeben, Liste 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

ich das erreicht habe durch einen leichten Missbrauch von extra requirements zu begehen. Du warst fast da, um die Extrasyntax zu versuchen, nur dass tests_require Deps auf diese Weise nicht automatisch verfügbar sind.

Mit einem setup.py wie folgt aus:

from setuptools import setup 

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

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

Sie können dann die Test Abhängigkeiten mit den Extras Syntax installiert werden, zum Beispiel aus dem Projekt-Stammverzeichnis:

$ pip install .[test] 

Geben Sie die gleiche Syntax Tox in tox.ini, keine Notwendigkeit, den Standard-install_command anzupassen:

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

Jetzt müssen Sie nicht über die Abhängigkeitsliste in zwei halten Orte, und sie sind ausgedrückt, wo sie für ein veröffentlichtes Paket sein sollten: in den Packaging-Metadaten anstelle von requirements.txt Dateien.

Es scheint, dass diese kleinen Extras hacken is not all that uncommon.