325 votes

Problème de PATH avec pytest 'ImportError : Pas de module nommé YadaYadaYada'.

J'ai utilisé easy_install pour installer pytest sur un mac et j'ai commencé à écrire des tests pour un projet avec une structure de fichiers comme celle-ci :

repo/
   |--app.py
   |--settings.py
   |--models.py
   |--tests/
          |--test_app.py

exécuter py.test alors que dans le répertoire repo, tout se comporte comme on peut s'y attendre

mais quand j'essaie la même chose sous linux ou Windows (les deux ont pytest 2.2.3 sur eux), il aboie dès qu'il rencontre sa première importation de quelque chose de mon chemin d'application. Disons par exemple from app import some_def_in_app

Dois-je modifier mon PATH pour exécuter py.test sur ces systèmes ? Quelqu'un a-t-il déjà rencontré ce problème ?

38voto

Ford Guo Points 195

Vous pouvez utiliser PYTHONPATH dans la racine du projet.

PYTHONPATH=. py.test

Ou utiliser pip install comme import modifiable

pip install -e .   # install package using setup.py in editable mode

24voto

Jeff MacDonald Points 447

J'ai créé ceci pour répondre à votre question et à ma propre confusion. J'espère que cela vous aidera. Faites attention à PYTHONPATH à la fois dans la ligne de commande py.test et dans le tox.ini.

https://github.com/jeffmacdonald/pytest_test

Plus précisément : Vous devez indiquer à py.test et tox où trouver les modules que vous incluez.

Avec py.test vous pouvez le faire :

PYTHONPATH=. py.test

Et avec tox, ajoutez ceci à votre tox.ini :

[testenv]
deps= -r{toxinidir}/requirements.txt
commands=py.test
setenv =
    PYTHONPATH = {toxinidir}

24voto

user13037517 Points 249

J'ai eu le même problème avec Flask.

Quand j'ai ajouté :

__init__.py

dans le dossier des tests, le problème a disparu :)

Probablement l'application n'a pas pu reconnaître le dossier tests comme module

12voto

Gonzalo Points 404

Je l'ai corrigé en supprimant le niveau supérieur __init__.py dans le dossier parent de mes sources.

10voto

zilupe Points 2137

J'ai commencé à être bizarre ConftestImportFailure: ImportError('No module named ... alors que j'avais accidentellement ajouté __init__.py dans mon répertoire src (qui n'était pas censé être un paquet Python, juste un conteneur de toutes les sources).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X