Denken Sie, was auf Ihrem PYTHONPATH
ist. Das Toplevel-Paket für Ihr Projekt ist my_project
, so dass der Beginn eines beliebigen Imports für etwas in Ihrem Projekt sein muss.
from my_project.foo import bar
Sie könnten auch einen relativen Import verwenden, obwohl dies nicht so klar ist, und brechen würden, wenn Sie jemals die relative Position des Moduls geändert Sie von diesem Import verrichten.
from ..foo import bar
Idealerweise ist der test
Ordner ist kein Paket überhaupt, und ist nicht Teil des Anwendungspakets. Siehe pytests Seite auf good practices. Dies erfordert, dass Sie ein setup.py
zu Ihrem Paket hinzufügen und es in Ihrem virtualenv im Entwicklungsmodus installieren.
pip install -e .
Sie die Tests nicht direkt an einer Datei in Ihrer Anwendung durch den Hinweis. Nachdem Sie Ihr Projekt korrekt strukturiert/installiert haben, verwenden Sie den Erkennungsmechanismus für jedes Framework, mit dem Sie die Tests für Sie ausführen. Zum Beispiel mit pytest weist nur im Testordner:
pytest tests
Oder für den Einbau-Modul Unittest:
python -m unittest discover -s tests
Try 'import sys; sys.path.append ('..') 'in' test_bar.py'. Eine bessere Lösung wäre es, 'sys.path' basierend auf dem absoluten Pfad von my_project zu modifizieren. – linuxfan
Ich möchte den Code ideal so organisieren, dass ich das nicht tun muss .... Was wäre eine bessere Möglichkeit, den Code zu organisieren? –
Es gibt keine Notwendigkeit, sich mit 'sys.path' herumzuärgern; Das ist der falsche Weg. Hier ist ein Beispiel: http://StackOverflow.com/Questions/7685483 – FMc