2017-01-31 2 views
0

Ich arbeite an einer Flask-App und versuche, meine Testdatei auszuführen, ist aber nicht dazu in der Lage. Meine aktuelle App-Struktur ist:ModuleNotFoundError beim Versuch, von außerhalb des Verzeichnisses zu importieren

Project 
── app 
│   ├── __init__.py 
│   ├── forms.py 
│   ├── model.py 
│   ├── models.py 
│   ├── static 
│   │   ├── css 
│   │   ├── fonts 
│   │   ├── img 
│   │   ├── js 
│   │   └── uploads 
│   ├── templates 
│   │   ├── client 
│   │   │   ├── client-base.html 
│   │   │   ├── client-inventory.html 
│   │   │   ├── client-login.html 
│   │   │   ├── client-macros.html 
│   │   │   ├── client-main.html 
│   │   │   └── client-signup.html 
│   │   └── user 
│   │    ├── user-base.html 
│   │    ├── user-macros.html 
│   │    └── user-main.html 
│   └── views 
│    ├── __init__.py 
│    ├── client.py 
│    └── user.py 
├── config.py 
├── run.py 
└── tests 
    └── test_user_model.py 

, wenn ich versuche from app.models import User in test_user_model.py es wirft ModuleNotFoundError: No module named 'app' zu laufen. Ich habe versucht, die Aussage Import Bearbeitung unzählige verschiedene Möglichkeiten, aber es wirft immer noch einen Fehler in jedem Fall (from ..app import models außerhalb des Bereichs ist, import app und ähnliche Importe funktionieren auch nicht.)

+1

In welchem ​​Ordner führen Sie das aus? – Suever

Antwort

3

Sie sollten __init__.py in Ihrem Verzeichnis tests hinzufügen. Das leere __init__.py wird dieses Verzeichnis in ein Paket umwandeln. Dann können Sie diese Zeile in Ihrer test_user_model.py verwenden:

from app.models import User 

Details sehen in PEP 328.

+0

Können Sie bitte klarstellen, wo diese Importanweisung zu verwenden ist und wie "__init __. Py" funktioniert? – colllin

+0

@colllin Entschuldigung für die Verzögerung. –

0

Sie müssen hinzufügen app in Ihrem PYTHONPATH

+0

Sind Sie sicher? Das Importieren eines Moduls von außerhalb des Verzeichnisses scheint nicht so schwierig zu sein, ich habe es schon einige Male gesehen, ohne 'PYTHONPATH' bearbeiten zu müssen - sogar in der [offiziellen Flaschenübungsanwendung] (https://github.com) /pallets/flask/blob/master/examples/flaskr/tests/test_flaskr.py) Die Tests importieren die App durch Aufruf von 'from bolbrr import bubbrr' –

+0

Sie können das Modul entweder zum Python-Pfad hinzufügen, indem Sie die Umgebungsvariable exportieren oder Mach das im Code. – saloua

+0

Aber ich bin verwirrt, warum ich den Python-Pfad überhaupt ändern müsste, wenn andere Projekte Module aus verschiedenen Verzeichnissen problemlos importieren können? –

Verwandte Themen