Ich verwende tox
und coverage.py
, um Tests meines Python-Projekts in meinem Continuous Build Server auszuführen. Ich habe auch ein Paket pkg_x
von einem Hersteller (nicht verfügbar für PyPI), die ich installiert habe mit python3.5 setup.py install
, die es in /usr/lib/python3.5/site-packages
setzt. Jetzt muss ich das Paket für den Testcode verfügbar machen.Tox und Lib und Lib64 und Site-Pakete
Mein aktueller tox.ini
sieht wie folgt aus:
[tox]
envlist = py35
[testenv]
deps = nose
coverage
commands = coverage run -m nose []
sitepackages = True
und ich die Tests wie folgt:
python3.5 -m tox -- --verbose --with-doctest
Das spektakulär versagt - keiner der Abhängigkeits aufgeführten Pakete in meinem lokalen setup.py
(zB öffentliche Sachen wie more_itertools
) können gefunden werden, obwohl es Verzeichnisse wie .tox/py35/lib/python3.5/site-packages/more_itertools
erzeugt, die die relevanten Pakete zu enthalten scheinen. Wenn ich .tox/py35/bin/python3.5
anwerfen, sieht sys.path
wie folgt aus:
>>> [re.compile('.*\\.tox').sub('.tox', x) for x in sys.path]
['',
'.tox/py35/lib64/python35.zip',
'.tox/py35/lib64/python3.5',
'.tox/py35/lib64/python3.5/plat-linux',
'.tox/py35/lib64/python3.5/lib-dynload',
'/usr/lib64/python3.5',
'/usr/lib/python3.5',
'.tox/py35/lib/python3.5/site-packages']
Wenn ich die sitepackages = True
Linie von meinem tox.ini
entfernen, dann weiter ich komme, dass wie more_itertools
Pakete und der Rest der Sachen in meinem setup.py
Abhängigkeiten jetzt gefunden werden, aber das oben erwähnte Vendor-Paket pkg_x
kann immer noch nicht gefunden werden. Und sys.path
sieht wie folgt aus:
>>> [re.compile('.*\\.tox').sub('.tox', x) for x in sys.path]
['',
'.tox/py35/lib64/python35.zip',
'.tox/py35/lib64/python3.5',
'.tox/py35/lib64/python3.5/plat-linux',
'.tox/py35/lib64/python3.5/lib-dynload',
'/usr/lib64/python3.5',
'/usr/lib/python3.5',
'.tox/py35/lib/python3.5/site-packages',
'/usr/lib64/python3.5/site-packages',
'/usr/lib/python3.5/site-packages']
In keinem Fall hat .tox/py35/
scheinen den Hersteller Paket enthalten pkg_x
überall. Und obwohl das Verzeichnis /usr/lib/python3.5/site-packages
aufgeführt ist, wenn ich .tox/py35/bin/python3.5
manuell starte, wird pkg_x
nicht wirklich gefunden, wenn die Tests ausgeführt werden.
Es sieht auch aus wie sitepackages = True
hat den gegenteiligen Effekt von dem, was es bei http://tox.readthedocs.io/en/latest/config.html#confval-sitepackages=True|False dokumentiert ist, richtig tun?
Beratung sehr geschätzt!
Ich habe einen Kommentar zu einem Tox-Problem, das aussieht wie die gleiche Sache, die ich sehe: https://github.com/tox-dev/tox/issues/461#issuecomment-303855697 –
'tox' erstellt seine eigene virtualenvs. Wie vertraut bist du mit virtualenv? Aktiviere das venv im '.tox' Verzeichnis und debugge von dort. –