Fehler bei der Verwendung von Quell-in eine python-Tox ini-Datei
Ich versuche, Tox und Conda spielen gut zusammen. Vor allem, weil ich eine Menge von nicht-python-Abhängigkeiten installiert werden müssen und es wurde einfach zu erstellen Conda-Distributionen. Dann kann ich alles installieren, mit einer einfachen conda install
.
Aber ich habe Probleme mit der Aktivierung der conda Umgebung.
[tox]
envlist = py27
[testenv]
whitelist_externals =
conda
source
py.test
setenv =
PYTHONPATH = {toxinidir}:{toxinidir}/damlarces
install_command =
python build_env.py --conda-env {toxworkdir}/conda {packages}
commands =
source activate {toxworkdir}/conda
py.test --basetemp={envtmpdir}
Den python build_env.py --conda-env {toxworkdir}/conda {packages}
kümmert sich um die Erstellung der Umgebung (falls benötigt) Installation der Pakete, etc. Das problem kommt bei der source activate {toxworkdir}/conda
Linie. Ich bekomme eine ERROR: InvocationError: could not find executable 'source'
Fehler. Tippen Sie den Befehl direkt in die Kommandozeile funktioniert.
Für diejenigen, die interessiert sind. Die build_env.py
ist in diesem Gist: https://gist.github.com/JudoWill/70450979353fa2d12823 ... zur Zeit nur die Installation von Python-Abhängigkeiten, sondern auch in seiner vorgesehenen Umgebung es wird die Installation von Conda repo ' s, die sind nicht unbedingt python-Bibliotheken.
Irgendwelche Gedanken?
- Ich weiß weder conda noch tox, aber da Sie zu sein scheinen in der Lage zum ausführen von python-Skripten auf diese Weise können Sie nicht schreiben Sie ein Skript zum wickeln rufen, um
source
ähnlichbuild_env.py
? - Das versucht. Aufgrund der Art, Tox funktioniert die shell verloren zwischen den
install_command
und diecommands
Streckenabschnitten. Ich habe auch versucht zu Kapseln, die zweicommands
in einer einzigen bash-Skript. Dies gibt auch undInvocationError
. - Konnte Sie zeigen, was im inneren
build_env.py
? Danke. - Sehen Sie die
build_env.py
code hier: gist.github.com/JudoWill/70450979353fa2d12823
Du musst angemeldet sein, um einen Kommentar abzugeben.
source
ist nicht ein Befehl. Es ist ein shell-builtin.source script.sh
Ursachenscript.sh
ausgeführt werden innerhalb der aktuellen shell. Dies ist notwendig füractivate
, denn es ändert sich der PFAD, und Sie möchten, dass diese änderungen Einfluss auf die shell selbst (normalerweise, wenn Sie ein Skript ausführen, es läuft in einer subshell, die hat Ihre eigene Umgebung, die keine Auswirkungen auf die aufrufende shell die Umwelt).Ich weiß nicht, ob tox unterstützt das setzen von environment-Variablen in den Befehlen. Wenn dem so ist, können Sie einfach
Ansonsten verwenden Sie einfach den absoluten Pfad zu allen Befehlen, wie
PATH
wird nur eingestellt, lokalen tox. Jedes mal, wenn Sie einer environment-Variablen in ein Programm oder ein Skript, sondern nur auf die Umwelt für das Programm, nicht Ihre Schale (die Ausnahme ist, wenn Sie ein bash-Skript, das Sie anrufen mitsource
).export
Befehl.ERROR: InvocationError: could not find executable 'export'
setenv
Abschnitttox.ini
hinzufügen den Pfad. Das problem ist, dass, wenn Sie eine neue Ausführung derconda create
noch nicht laufen noch und es gibt keineconda/bin
- Verzeichnis.Nach vielen basteln habe ich herausgefunden, ein work-around. Seine wahrscheinlich spröde änderungen in der Tox aber solange Sie tests ausführen, die in der Reihenfolge von
envlist
dann sollte es funktionieren.Vorgeschlagen von @asmeurer in seiner Antwort, der trick ist, irgendwie ändern die
PATH
anerkannt tox. Aber um das zu generieren, dieconda/bin
ich mussconda create
. Zuerst habe ich versucht, mit derexport PATH={toxworkdir}/conda/bin:$PATH
vorgeschlagen asmeurer, aber diese lief in der gleichenInvocationError
Problem nur mitexport
stattsource
.Weiter, ich habe versucht mit der
setenv
tox-Sektion den Pfad ändern. Dies führte zu einem Huhn & ei-problem. Ich konnte nicht fügen Sie diebin
Verzeichnis, bis ich lief dieconda create
Befehl. Aufgrund der Standard-Reihenfolge der Befehle in Tox es scheint nicht, wie bekomme ich diesetenv
zu unterscheiden (oder re-run) nach derinstall_command
.Den work-around, ich kam mit war die Schaffung einer neuen
env
testen gegen und dann teilen Sie diese Umgebung mit den weiteren tests.Dieser funktioniert. Ich bin mir nicht sicher, wie schwierig es sein würde, zu verallgemeinern dies um ein Vielfaches python-Umgebung, aber es funktioniert für mich.