2016-06-21 71 views
15

Setup

Ho la seguente struttura ad albero nel mio progetto:Come eseguire il debug di un pacchetto Python in PyCharm

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

metadata.py importazioni metadata_errors.py con l'espressione:

from .metadata_errors.py import * 

Così l'impostazione di un percorso relativo al modulo nella stessa directory (notare il prefisso del punto).

posso correre metadata.py nell'editor PyCharm 2016 molto bene con la seguente configurazione:

enter image description here

Problema

Tuttavia, con questa configurazione non riesco a eseguire il debug metadata.py. PyCharm restituisce il seguente messaggio di errore (parziale stack trace):

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

debugger PyCharm viene chiamato in questo modo:

/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 

Domanda

Come posso configurare questo progetto in modo che PyCharm è in grado eseguire e eseguire il debug di un file che esegue importazioni relative?

+0

Hai provato a specificare 'cineaste.metadata_errors' invece dell'importazione relativa? –

+0

È 'cineaste' contrassegnato come una radice di fonti? – nme

risposta

1

Una delle possibili soluzioni potrebbe essere quella di eseguire il modulo tramite uno script intermedio che verrà eseguito in modalità di debug. E.g. test_runner.py:

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

Si potrebbe anche provare a rimuovere l'ultimo nodo (/ cineaste) dalla directory di lavoro. Questo funziona configurazione (RUN e di debug) per me (in PyCharm: 2017.2.2)

enter image description here

-1

vorrei suggerire di non utilizzare * dal momento che può causare molti problemi in futuro, due classi o metodi di essere nominato il stesso ecc.

+0

Questo è un buon consiglio, ma non risponde alla domanda dell'OP. Questo sarebbe stato più appropriato come commento ... solo una FYI per le risposte future. – tnknepp