J'ai une structure de dossier comme celle-ci
App
--App
--app.py
--Docs
--Tests
--test_app.py
Dans mon test_app.py file
, j'ai une ligne pour importer mon module d'application. Lorsque j'exécute py.test sur le dossier racine, j'obtiens cette erreur concernant aucun module nommé app. Comment dois-je configurer cela?
Donc, vous exécutez py.test
à partir de /App
. Etes-vous sûr que /App/App
est dans votre $PYTHONPATH
?
Si ce n'est pas le cas, le code qui tente de import app
échouera avec un tel message.
EDIT0: y compris les informations de mon commentaire ci-dessous, par souci d'exhaustivité.
Une tentative d'importation d'application ne réussira que si elle a été exécutée dans /App/App
, ce qui n'est pas le cas ici. Vous voudrez probablement faire de /App/App
un paquet en y mettant __init__.py
et modifier votre importation pour que l'application soit qualifiée en tant que from App import app
.
EDIT1: par demande, en ajoutant des explications supplémentaires de mon deuxième commentaire ci-dessous.
En plaçant __init__.py
dans /App/App
, ce répertoire devient un paquet. Ce qui signifie que vous pouvez en importer, à condition que celui-ci - le répertoire - soit visible dans le $PYTHONPATH
. C'est à dire. vous pouvez faire à partir de App import app
si /App
est dans le $PYTHONPATH
. Votre répertoire de travail actuel est automatiquement ajouté à $PYTHONPATH
. Ainsi, lorsque vous exécutez un script à partir de /App
, l'importation fonctionne.
En travaillant avec Python 3 et en obtenant la même erreur sur une structure de projet similaire, je l'ai résolue en ajoutant un fichier __init__
à mon module tests
.
$ touch tests/__init__.py
Je ne suis pas très bon pour empaqueter et importer, mais je pense que cela aide pytest
à déterminer où se trouve le module App
cible.
J'avais déjà un fichier __init__.py
dans le répertoire /App/App
et je voulais exécuter des tests à partir de la racine du projet sans magie de modification de chemin:
python -m pytest tests
La sortie ressemble immédiatement à ceci:
➟ python -m pytest tests
====================================== test session starts ======================================
platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/andrew/code/app, inifile:
plugins: teamcity-messages-1.17
collected 46 items
... lines omitted ...
============================= 44 passed, 2 skipped in 1.61 seconds ==============================
J'ai également eu la même erreur lors de l'exécution des cas de test pour mon application situés comme suit
myproject
--app1
--__init.py__
--test.py
--app2
--__init.py__
--test.py
--__init.py__
J'ai supprimé mon fichier myproject _INIT.PY_et mon boom, des scénarios de test sont en cours d'exécution.