pytest kann kein Modul importieren, während Python dies kann

Lesezeit: 6 Minuten

Benutzer-Avatar
Zorglub29

Ich arbeite an einem Paket in Python. Ich verwende virtualenv. Ich setze den Pfad zum Stamm des Moduls in einem .pth-Pfad in meiner virtuellen Umgebung, damit ich Module des Pakets importieren kann, während ich den Code entwickle und teste (Frage 1: Ist das eine gute Möglichkeit?). Das funktioniert gut (hier ist ein Beispiel, das ist das Verhalten, das ich will):

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python
Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from rc import ns
>>> exit()
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python tests/test_ns.py 
issued command: echo hello
command output: hello

Wenn ich jedoch versuche, PyTest zu verwenden, erhalte ich einige Importfehlermeldungen:

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ pytest
=========================================== test session starts ============================================
platform linux2 -- Python 2.7.12, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /home/zz/Desktop/GitFolders/rc, inifile: 
collected 0 items / 1 errors 

================================================== ERRORS ==================================================
________________________________ ERROR collecting tests/test_ns.py ________________________________
ImportError while importing test module '/home/zz/Desktop/GitFolders/rc/tests/test_ns.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_ns.py:2: in <module>
    from rc import ns
E   ImportError: cannot import name ns
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================= 1 error in 0.09 seconds ==========================================
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ which pytest
/home/zz/Desktop/VirtualEnvs/VEnvTestRc/bin/pytest

Ich bin etwas verwirrt, es sieht so aus, als ob dies auf einen Importfehler hinweist, aber Python macht es gut, also warum gibt es speziell mit PyTest ein Problem? Irgendwelche Vorschläge zum Grund/zur Abhilfe (Frage 2)? Ich habe gegoogelt und den Fehler „ImportError: cannot import“ für PyTest überlaufen lassen, aber die Treffer, die ich erhalten habe, beziehen sich auf den fehlenden Python-Pfad und die Abhilfe dafür, was hier nicht das Problem zu sein scheint. Irgendwelche Vorschläge?

  • Dies könnte auch ein fehlendes Importproblem sein

    – Spartakus

    24. Februar um 9:28 Uhr

Ich kann nicht sagen, dass ich verstehe, warum das funktioniert, aber ich hatte das gleiche Problem und die Tests funktionieren gut, wenn ich sie ausführe python -m pytest.

Ich bin in einer virtuellen Umgebung, wobei pytest auch global verfügbar ist:

(proj)tom@neon ~/dev/proj$ type -a python
python is /home/tom/.virtualenvs/proj/bin/python
python is /usr/bin/python

(proj)tom@neon ~/dev/proj$ python -V
Python 3.5.2

(proj)tom@neon ~/dev/proj$ type -a pytest
pytest is /home/tom/.virtualenvs/proj/bin/pytest
pytest is /usr/bin/pytest

(proj)tom@neon ~/dev/proj$ pytest --version
This is pytest version 3.5.0, imported from /home/tom/.virtualenvs/proj/lib/python3.5/site-packages/pytest.py

  • Hat auch die Arbeit für mich erledigt, die Sache ist, es wird von der Python-Version ausgeführt, die anstelle Ihrer v.env definiert ist.

    – Nebel

    24. April 2018 um 6:19 Uhr

  • ein grund könnte das sein python -m pytest [...] “wird auch das aktuelle Verzeichnis hinzufügen sys.path.”

    – minusf

    5. Dezember 2018 um 13:45 Uhr

  • Hatte das gleiche in Windows 10 und das Ausführen von python -m pytest hat es gelöst

    – Duccio

    12. August 2019 um 17:35 Uhr

  • Dies funktionierte auch in meiner virtuellen Umgebung, die ich ausführen musste python3 -m pytest

    – Rishi Raj

    4. Juni 2020 um 3:17 Uhr

  • Basierend auf dem Kommentar von @minusf verwende ich PYTHONPATH=.:./src pytest als Make-Ziel.

    – Jan Groth

    26. Juni 2020 um 4:49 Uhr

  • Die akzeptierte Antwort __init__.py file in a folder containing TESTS hat mein Problem nicht gelöst. Dieser hat funktioniert. Ich denke, es liegt an der Dateihierarchie.

    – schmido

    8. Mai 2019 um 20:51 Uhr

  • Ich habe entfernt __init__.py Datei. Ich stand immer noch vor dem Problem. Das Hinzufügen der Datei conftest.py zum Stammverzeichnis hat bei mir funktioniert.

    – Vijay Sali

    29. Januar 2020 um 8:28 Uhr


  • Ich würde erwarten, dass sich conftest.py in /tests befindet, nicht im Stammverzeichnis

    – Aaron McMillin

    29. Januar 2020 um 15:58 Uhr

  • Diese Lösung hat bei mir funktioniert, aber weiß jemand, dass dies zu einem Importfehler führen würde?

    – Aldo Okware

    8. Juni 2020 um 12:26 Uhr

  • Das hat es auch bei mir behoben! In meinem Fall war das Problem meiner Meinung nach auch, dass meine Projektstruktur proj_folder als Stammverzeichnis war und zwei untergeordnete Elemente proj_folder/project_folder und proj_folder/tests hatte (also derselbe Name für das Projektstammverzeichnis und das Unterverzeichnis). Also hatte ich in einer der Testdateien im Test einen Import wie: from proj_folder import main. Da ich jetzt eine Init im Projektstamm hatte, versuchte pytest, ein Hauptmodul abzurufen, das sich tatsächlich in project_folder/project_folder befand!

    – langweiliger Tag

    6. Juni um 9:54

Ich hatte das gleiche Problem, aber aus einem anderen Grund als den genannten:

Ich hatte py.test global installiert, während die Pakete in einer virtuellen Umgebung installiert wurden.

Die Lösung war zu installieren pytest in der virtuellen Umgebung. (Falls Ihre Shell ausführbare Dateien hasht, wie es Bash tut, verwenden Sie hash -roder verwenden Sie den vollständigen Pfad zu py.test)

  • Ich habe gerade festgestellt, dass ich das gleiche hinterhältige Problem mit Anaconda hatte. Ich habe vergessen hinzuzufügen pytest in der virtuellen Umgebung erstellt von condanoch pytest Es ist in der Root-Umgebung von Anaconda verfügbar. Daher pytest könnte gefunden, aber kein Paket in der Umgebung installiert.

    – Overdriver

    14. Februar 2018 um 7:28 Uhr


  • Ich hatte das gleiche Problem. pytest wurde global installiert und nicht in der virtualenv. pip3 install pytest inside virtualenv hat das Problem behoben.

    – Ankit Singh

    14. September 2018 um 14:03 Uhr

  • Ich hatte es sogar in meinem venv installiert, aber aus irgendeinem Grund nahm es es nicht auf. (which pytest zeigte die falsche Version) Das Deaktivieren und erneute Aktivieren des venv hat alles behoben.

    – Strickleiter

    2. Februar 2021 um 23:32 Uhr

Benutzer-Avatar
David Buck

Hatte ein ähnliches Problem und es funktionierte, als ich hinzufügte __init__.py Datei im Testverzeichnis.

  • Ich habe gerade festgestellt, dass ich das gleiche hinterhältige Problem mit Anaconda hatte. Ich habe vergessen hinzuzufügen pytest in der virtuellen Umgebung erstellt von condanoch pytest Es ist in der Root-Umgebung von Anaconda verfügbar. Daher pytest könnte gefunden, aber kein Paket in der Umgebung installiert.

    – Overdriver

    14. Februar 2018 um 7:28 Uhr


  • Ich hatte das gleiche Problem. pytest wurde global installiert und nicht in der virtualenv. pip3 install pytest inside virtualenv hat das Problem behoben.

    – Ankit Singh

    14. September 2018 um 14:03 Uhr

  • Ich hatte es sogar in meinem venv installiert, aber aus irgendeinem Grund nahm es es nicht auf. (which pytest zeigte die falsche Version) Das Deaktivieren und erneute Aktivieren des venv hat alles behoben.

    – Strickleiter

    2. Februar 2021 um 23:32 Uhr

Benutzer-Avatar
Neuron

Setzen Sie einfach ein Leerzeichen conftest.py Datei im Projektstammverzeichnis, denn wann pytest entdeckt ein conftest.pyes modifiziert sys.path damit es Sachen aus importieren kann conftest Modul. Eine allgemeine Verzeichnisstruktur kann sein:

Root
├── conftest.py
├── module1
│   ├── __init__.py
│   └── sample.py
└── tests
    └── test_sample.py

  • Dies ist die beste Antwort. Vergiss das alles __init__.py Verrücktheit.

    – Wisbucky

    11. September 2021 um 21:27 Uhr

  • Hat bei mir nicht funktioniert. Alles sehr merkwürdig.

    – Mike Nagetier

    23. Oktober 2021 um 18:16 Uhr

  • Hat bei mir auch nicht funktioniert.

    – Shah Zain

    10. Januar um 7:46

  • Hat für mich funktioniert. Ich glaube, das ist die langfristige Lösung für alle, die damit arbeiten python -m pytest möchte aber nicht jedes Mal den zusätzlichen Wortschwall hinzufügen

    – Major Major

    11. Januar um 1:08

1055000cookie-checkpytest kann kein Modul importieren, während Python dies kann

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy