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中正常使用。