2016-01-27 3 views
5

Ich habe Python-Paket mit setup.py. Es hat regelmäßige Abhängigkeiten, die in deklariert sind, und Entwicklungsabhängigkeiten, die in tests_require deklariert sind, z.B. flake8.Wie kann Travis CI Python-Abhängigkeiten installieren, die in tests_require deklariert sind?

Ich dachte, pip install -e . oder unter python setup.py test wird auch meine Entwicklungsabhängigkeiten installieren und sie werden verfügbar sein. Aber anscheinend sind sie nicht und ich habe Mühe, meinen Travis CI Build richtig einzurichten.

install: 
    - "pip install -e ." 
script: 
    - "python setup.py test" 
    - "flake8" 

bauen, wie oben konfiguriert wird fehlschlagen, weil flake8 wird nicht als gültiger Befehl gefunden werden. Ich habe auch versucht, flake8 aus dem python setup.py test Befehl (über subprocess), aber auch ohne Erfolg aufzurufen.

Auch ich hasse die Tatsache, dass flake8 kann nicht einfach integraler Bestandteil des Befehls python setup.py test gemacht werden, aber das ist eine andere Geschichte.

Antwort

10

Ich bevorzuge es, die meisten der Konfiguration in tox.ini zu behalten und verlassen Sie sich darauf zu installieren und auszuführen, was ausgeführt werden soll. Zum Testen verwende ich pytest (die Lösung kann leicht modifiziert werden, um andere Test-Frameworks zu verwenden).

Folgende Dateien werden verwendet:

  • tox.ini: automatisiert den Test
  • .travis.yml: Anweisungen für Travis
  • setup.py: Installationsskript, das Paket zu installieren
  • test_requirements.txt zu testen: Liste der Anforderungen für Prüfung

tox.ini

[tox] 
envlist = py{26,27,33,34} 

[testenv] 
commands = 
    py.test -sv tests [] 
deps = 
    -rtest-requirements.txt 

.travis.yml

sudo: false 
language: python 
python: 
    - 2.6 
    - 2.7 
    - 3.3 
    - 3.4 
install: 
    - pip install tox-travis 
script: 
- tox 

test_requirements.txt

nur gewöhnliche Anforderungen Datei whith, was immer Sie dort benötigen (z flake8, pytest und andere Abhängigkeiten)

Sie Probe verwendet es bei https://github.com/vlcinsky/awslogs/tree/pbr-setup.py

sehen kann

Die Tatsache, es pbr, coverage und coverall ist meine Antwort nicht relevant (mit oder ohne pbr funktioniert).

+0

Dies ist wahrscheinlich die beste Lösung bis heute. FWIW, was ich auch in der Wildnis gesehen habe, ist 'extras_require' in' setup.py' zusammen mit 'pip install -e. [Tests]'. Es ist auch einfach, es DRY zu halten und die Testanforderungen als eine separate Liste zu definieren, die sowohl 'extras_require [' tests ']' als auch 'tests_require' zugeordnet ist. (Siehe zum Beispiel meine Bibliothek https://github.com/honzajavorek/fiobank/) –

0

Die direktere Antwort ist, dass pip installtests_require nicht installiert wird, Laufzeitanforderungen von Testanforderungen absichtlich getrennt. python setup.py test erstellt eine virtualenv-ähnliche Umgebung, in der die Tests ausgeführt werden, und macht dies anschließend wieder rückgängig. flake8 ist somit nicht verfügbar, sobald es fertig ist.

Flake8 hat setuptools integration und auch integrates with pytest, wenn Sie das verwenden. pytest selbst also integrates with setuptools.