2017-11-29 4 views
0

Ich verwende PyCharm CE ein Projekt mit einem ähnlichen Aufbau wie diese zu entwickeln:Python: ‚Import: Nein Modul namens <my module>‘

test_python/ 
|-- app 
| |-- __init__.py 
| |-- mymodule.py 
| |-- mymodule.pyc 
| `-- test_mymodule.py 
|-- config.py 
`-- tests 
    |-- __init__.py 
    |-- test_config.py 
    `-- test_models.py 

Wenn ich versuche, meine Testskripte wie test_config.py zu laufen , erhalte ich:

$ python tests/test_config.py 
Traceback (most recent call last): 
    File "tests/test_config.py", line 1, in <module> 
    from config import app_config 
ImportError: No module named config 

ich viele andere SO Beiträge gelesen haben, die über das Müssen eine init Py-Datei in allen Verzeichnissen sprechen, die Pakete sind (was ich bereits getan haben). Viele schlagen auch vor, mit sys.path herumzuspielen. Mein Problem mit diesem letzteren Ansatz ist, dass ich mich nie zuvor mit den Pfaden einmischen musste. Ich bin mir nicht sicher, ob es etwas ist, das sich mit meinem Setup geändert hat, aber hier ist es:

Python 2.7 | macOS Sierra | PyCharm CE

Ich habe versucht, eine virtuelle Umgebung mit virtualenv zu installieren, aber habe keinen Unterschied gesehen. Hier ist das Beispielprojekt auf github, wenn Sie es selbst ausführen möchten

+0

'$ python test_models.py' führt zu' ImportError: Kein Modul mit dem Namen app.mymodule ', während' $ python app/test_mymodule.py' nicht fehlschlägt, obwohl beide Testskripte fast identische Inhalte haben import statement – kip2

Antwort

0

Es scheint, dass ein Problem mit der Ordnertiefe besteht. Ersetzen Sie from ../config import app_config.

+0

Meinst du ersetzen 'von Config Import App_config' mit etwas anderem? Das Ändern dieser Zeile nach 'from ..config import app_config' führt zu einem' ValueError: Versuchter relativer Import in Nicht-Paket ' – kip2

+0

Hier ist das ähnliche Problem, ich denke, das sind die Lösungen. [Wie zu beheben "versucht relativen Import in nicht-Paket" sogar mit __init__.py] (https://stackoverflow.com/questions/11536764/how-to-fix-attempted-relative-import-in-non-package -even-with-init-py), [ValueError: Versuch eines relativen Imports in Nicht-Paket nicht für Testpaket] (https://stackoverflow.com/questions/37193670/valueerror-attempted-relative-import-in-non- Paket-nicht-für-Tests-Paket) –

0

Ich denke, es wird funktionieren, wenn Sie das Arbeitsverzeichnis in Ihrer Laufkonfiguration zu test_python ändern. Alle Pakete in Ihren import-Anweisungen sind relativ zu einem Eintrag in Ihrem Python-Pfad, und das Arbeitsverzeichnis befindet sich normalerweise im Python-Pfad.