前言
這段時間要用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中正常使用。