Cómo conectar Qgis con pycharm en Ubuntu OS

10

Acabo de comenzar a usar pycharm con qgis pero no pude conectarlos a ambos. Pycharm siempre permanece en un estado de "espera de conexión". La mayoría de los tutoriales disponibles apuntan a las ventanas, pero estoy usando ubuntu, por lo que no pude encontrar la forma de depurar el código qgis en pycharm. Aquí está mi código pycharm:

from shapely.geometry import *
from shapely.wkt import loads

import sys

import pydevd

pydevd.settrace('localhost', port=53100, stdoutToServer=True, stderrToServer=True)

class Loader:

    def __init__(self, iface):

        """Initialize using the qgis.utils.iface
        object passed from the console.

        """
        self.iface = iface

He habilitado puntos de interrupción en pycharm y también he agregado pycharm-debug.egg en pythonpath. ¿Alguien puede configurarlo desde qgis en ubuntu?

pycharm siempre está en:

Starting debug server at port 53100
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('localhost', port=53100, stdoutToServer=True, stderrToServer=True)
Waiting for process connection...

Cuando ejecuto este script en la parte superior desde qgis no pasa nada, no se llama al punto de interrupción.

tipo de Mimica
fuente
¿Desea que Pycharm reconozca las clases de QGIS?
wondim

Respuestas:

1

En Arch Linux (pero también debería funcionar en Ubuntu), uso este script de Python que al cargar QGIS comprueba si alguien está escuchando en el puerto 53100. Si es así, intenta importar pydevd desde el directorio de pycharm e intenta conectarse a El depurador remoto.

import psutil


def is_listening_local(port=53100):
    """Return True if someone is listening on the port"""

    els = psutil.net_connections()
    for el in els:
        if el.laddr.port == port:
            return True
    else:
        return False


if is_listening_local():
    try:
        import sys
        # Add the pydevd directory to PYTHONPATH
        sys.path.append('/opt/pycharm-professional/helpers/pydev/')

        import pydevd
        # Connect to the remote debugger
        pydevd.settrace(
            'localhost', port=53100, stdoutToServer=True, stderrToServer=True,
            suspend=False
        )
    except Exception:
        pass

Mi configuración completa está aquí.

Marioba
fuente