2016-07-15 12 views
0

Das mag wie eine einfache Frage erscheinen, aber ich habe keine Antwort gefunden, die das Verhalten erklärt, das ich sehe. Harte eine einfache Repro Fall zu schaffen, aber ich grundsätzlich eine Paketstruktur wie dieses:Wie werden Python-Modulpfade in Dateisystempfade übersetzt?

a.b.c a.b.utils

Ich habe ein Projekt, das Dateien in a.b.c. (lassen Sie uns dieses aux_project nennen) hat und eine andere, die Dateien in a.b.d hat , a.b.utils, usw. (nennen Sie es main_project). Ich versuche, a.b.utils innerhalb pytest Tests im ersten Projekt zu importieren, tests_require verwendend. Dies funktioniert nicht, weil a.b aus irgendeinem Grund aus dem Inneren aux_project/a/b/__init__.pyc anstelle der virtualenv stammt und es Schatten das andere Paket (d. H. Diese a.b hat nur eine c drin, nicht d oder utils). Dies geschieht NUR im Testkontext. In Ipython kann ich alle Pakete gut laden, und sie werden korrekt von virtualenv geladen.

Was seltsamer ist, dass, wenn ich einfach löschen das aktuelle Verzeichnis, die Tests die pycs von virtualenv laden Sie und alles funktioniert (Ich brauche dieses Verzeichnis, obwohl)

Python == 2.7.9

Was ist los?

+0

Ich sollte hinzufügen, dass kein PYTHONPATH explizit festgelegt ist, und sowohl Ipython als auch die Tests werden in demselben vent ausgeführt –

Antwort

0

Ok, das Problem war einfach, dass der CWD dem PYTHONPATH vorangestellt wird. sys.path.pop(1) (0 ist das Test-Verzeichnis, vorangestellt von pytest) löste das Verhalten.