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 ?

0voto

SANN3 Points 2284

Nous avons résolu le problème en ajoutant la variable d'environnement suivante.

PYTHONPATH=${PYTHONPATH}:${PWD}/src:${PWD}/test

0voto

Betterthan Kwora Points 113

Si cette erreur pytest apparaît non pas pour votre propre paquet, mais pour un paquet installé par git dans le requirements.txt de votre paquet, la solution est de passer en mode d'installation modifiable.

Par exemple, supposons que le fichier requirements.txt de votre paquet contienne la ligne suivante :

git+https://github.com/foo/bar.git

Vous le remplacerez par le texte suivant :

-e git+https://github.com/foo/bar.git#egg=bar

-1voto

Baydaa Points 1

Très souvent, les tests ont été interrompus en raison de l'incapacité du module à être importé,Après recherche, j'ai découvert que le système regarde le fichier au mauvais endroit et nous pouvons facilement surmonter le problème en copiant le fichier, contenant le module, dans le même dossier que celui indiqué, afin d'être correctement importé. Une autre proposition de solution serait de changer la déclaration pour l'importation et montrer à MutPy le chemin correct de l'unité. Cependant, en raison du fait que plusieurs unités peuvent avoir cette dépendance, ce qui signifie que nous devons apporter des changements également dans leurs déclarations, nous préférons simplement déplacer l'unité dans le dossier.

-1voto

davide burba Points 1

Ma solution :

créer le conftest.py dans le fichier test répertoire contenant :

import os
import sys
sys.path.insert(0,os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/code/")

Cela ajoutera le dossier qui nous intéresse au chemin d'accès à python. sans modifier chaque fichier de test , en définissant une variable env ou en jouant avec les chemins absolus/relatifs.

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