zoukankan      html  css  js  c++  java
  • vscode python 开发环境+qgis开发

    前言

    这段时间要用python开发qgis的插件,记录一下配置vscode开发环境的过程

    安装格式化和代码检查工具

      #代码检查工具
      pip3 install flake8
      # 格式化工具
      pip3 install yapf
      # 附加的方式调试代码必须安装的python模块
      pip3 install ptvsd
    

    vscode 安装如下扩展

    其中python扩展是语言扩展用来调试按提示等。
    vscode 安装Pylance 作为 Language server

    vscode 的用户设置修改如下

        "python.linting.flake8Enabled": true,
        "python.linting.flake8Args": [
            "--max-line-length=120"
        ],
        "python.formatting.provider": "yapf",
        "python.formatting.yapfArgs": [
            "--style",
            "{column_limit: 120}"
        ],
        "pylance.insidersChannel": "daily"
    

    vscode 工程目录下的.vscode/settings.json的设置

      {
        // 设置自己代码提示的包含路径
        "python.autoComplete.extraPaths": [
            "/home/holo/.local/share/QGIS/QGIS3/profiles/default/python/plugins"
        ],
       "python.analysis.extraPaths": [
            "/home/holo/.local/share/QGIS/QGIS3/profiles/default/python/plugins"
        ],
        // 设置读取环境变量文件
        "python.envFile": "${workspaceFolder}/.venv/dev.env",
        // 设置Python解释器
        "python.defaultInterpreterPath": "python3",
         // 设置qt creator的启动路径
        "qttools.creator": "qtcreator"
    }
    

    调试QGIS的python插件

    首先,配置vscode的 launch.json 添加如下调试配置:

            {
                "name": "Python: 远程连接",
                "type": "python",
                "request": "attach",
                "connect": {
                    "host": "127.0.0.1",
                    "port": 5678
                },
                "pathMappings": [
                    {
                        "localRoot": "${workspaceFolder}",
                        "remoteRoot": "${workspaceFolder}"
                    }
                ]
            }
    

    其次,进行如下操作(开始附加调试之前在qgis的插件管理器中通过取消勾选和打勾保证加载的插件和当前的最新插件的代码一致)
    在 pyqt的action的槽函数开始添加如下代码

            ptvsd.enable_attach(address=('127.0.0.1', 5678))
            ptvsd.wait_for_attach()
    

    注意 ptvsd.enable_attach(address=('127.0.0.1', 5678))的设置要和launch.json中的配置是一样的。
    这样在触发该函数时会在 ptvsd.wait_for_attach() 处被阻塞,等待vscode 调试的attach。

    最后,在vscode用attach的方式进行调试就可以在断点处停下来了。

    关于插件内的自定义的Python package的加载问题

    "python.envFile": "${workspaceFolder}/.venv/dev.env",
    

    的 dev.env的内容如下

    # dev.env - development configuration
    PYTHONPATH=$PYTHONPATH:/home/holo/.local/share/QGIS/QGIS3/profiles/default/python/plugins
    

    解决调试当前文件导入当前目录的问题, 使用 from [插件目录}.{package_name} import {class_name}
    如果使用 from . {package_name} import {class_name} 是可以在qgis中正常使用的,但是无法在vscode中正常调试当前文件的代码。
    如果使用 from {package_name} import {class_name} 可以在当前文件正常调试但是无法在qgis中正常使用。

  • 相关阅读:
    面向对象(静态)
    面向对象 三大特性
    MySQL数据库表分区功能详解
    zabbix 库表介绍
    数据库分库分表思路
    Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
    zabbix 监控 tomcat
    zabbix 监控项报"Value "(No info could be read for "-p": geteuid()=1002 but you should be root"
    Linux中Swap与Memory内存简单介绍
    mysql常用命令杂记
  • 原文地址:https://www.cnblogs.com/xueye9/p/15629647.html
Copyright © 2011-2022 走看看