2016-06-21 12 views
15

Setup-

ich in meinem Projekt die folgenden Baumstruktur haben:Wie ein Python-Paket in PyCharm debuggen

Cineaste/ 
├── cineaste/ 
│   ├── __init__.py 
│   ├── metadata_errors.py 
│   ├── metadata.py 
│   └── tests/ 
│    └── __init__.py 
├── docs/ 
├── LICENSE 
├── README.md 
└── setup.py 

metadata.py Importe metadata_errors.py mit dem Ausdruck:

from .metadata_errors.py import * 

So eine Einstellung relativer Pfad zum Modul im selben Verzeichnis (beachten Sie das Punktpräfix).

kann ich metadata.py im PyCharm 2016 Editor ganz gut mit der folgenden Konfiguration auszuführen:

enter image description here

Problem

jedoch mit dieser Konfiguration ich nicht metadata.py debuggen kann. PyCharm gibt die folgende Fehlermeldung (Teil-Stack-Trace):

from .metadata_errors import * 
SystemError: Parent module '' not loaded, cannot perform relative import 

PyCharm Debugger wie so genannt wird:

/home/myself/.pyenv/versions/cineaste/bin/python /home/myself/bin/pycharm-2016.1.3/helpers/pydev/pydevd.py --multiproc --module --qt-support --client 127.0.0.1 --port 52790 --file cineaste.metadata 

Frage

Wie kann ich dieses Projekt gründen, damit PyCharm der Lage ist, Ausführen und Debuggen einer Datei, die relative Importe durchführt?

+0

Haben Sie versucht, 'cineaste.metadata_errors' anstelle des relativen Imports anzugeben? –

+0

Ist 'Cineaste' als Quellenstamm gekennzeichnet? – nme

Antwort

1

Eine der möglichen Lösungen könnte darin bestehen, Ihr Modul über ein intermediäres Skript auszuführen, das Sie im Debug-Modus ausführen. Zum Beispiel test_runner.py:

import runpy 
runpy.run_module('cineaste.metadata') 
0

Sie können auch versuchen, den letzten Knoten (/ Cineaste) aus dem Arbeitsverzeichnis zu entfernen. Diese Konfiguration funktioniert (run und debug) für mich (in PyCharm: 2017.2.2)

enter image description here

-1

Ich würde vorschlagen, * nicht verwenden, da, dass viele Probleme in der Zukunft führen kann, zwei Klassen oder Methoden genannt werden, die Gleiches etc.

+0

Das ist ein guter Rat, beantwortet aber die Frage des OP nicht. Dies wäre als Kommentar geeigneter gewesen ... nur ein Hinweis für zukünftige Antworten. – tnknepp