Jak połączyć Qgis z pycharm w Ubuntu OS

10

Właśnie zacząłem używać pycharm z qgis, ale nie mogłem połączyć obu. Pycharm zawsze pozostaje w stanie „oczekiwania na połączenie”. Większość dostępnych tutoriali wskazuje na okna, ale używam ubuntu, więc nie mogłem znaleźć sposobu na debugowanie kodu qgis na pycharm. Oto mój kod 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

Włączyłem punkty przerwania w pycharm, a także dodałem pycharm-debug.egg w pythonpath. Czy ktoś może skonfigurować go z qgis na Ubuntu?

pycharm jest zawsze w:

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...

Po uruchomieniu tego skryptu na qgis nic się nie dzieje, punkt przerwania nie zostaje wywołany.

typ mimetyczny
źródło
Czy chcesz, aby klasy QGIS były rozpoznawane przez Pycharm?
zastanawiam się

Odpowiedzi:

1

W Arch Linux (ale powinien działać również na Ubuntu), używam tego skryptu python, który podczas ładowania QGIS sprawdza, czy ktoś nasłuchuje na porcie 53100. Jeśli tak, próbuje zaimportować pydevd z katalogu pycharm i próbuje się połączyć zdalny debugger.

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

Moja pełna konfiguracja jest tutaj

Marioba
źródło