Python學習筆記番外:子產品開發中的debug
因為興趣使然和現實需要的關系,我寫了個Python子產品——markdown_img。
在編寫和更新的過程中,其中很大一部分時間花費在了研究如何打包和debug上了。
一開始我是在子產品目錄下編寫測試程式,但後來發現這樣并不能模拟通過
pip
安裝後使用者實際上使用的環境。
與此同時,在源碼目錄下放置測試程式和測試用的md檔案和圖檔也不妥,更不友善于打包。
後來我無奈之下都是打包->pip安裝->運作一條龍,循環往複,每次打包就要等一會,巨麻煩。
今天偶然想起VSCode在調試目前項目的時候是通過一個配置檔案的,那是不是可以通過那個配置檔案來設定整個項目的測試入口和環境?
的确如此,可以在
launch.json
中配置如下設定:
{
// 使用 IntelliSense 了解相關屬性。
// 懸停以檢視現有屬性的描述。
// 欲了解更多資訊,請通路: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 目前檔案",
"type": "python",
"request": "launch",
// "program": "${file}",
"program": "${workspaceFolder}\\tests\\test.py",
"cwd": "${workspaceFolder}\\tests",
"console": "integratedTerminal"
}
]
}
其中
program
就是項目調試的入口檔案,預設是目前檔案,我們這裡直接指定為測試程式。這樣不管我們正在修改項目下的哪個檔案,運作調試後都是通過測試程式運作。
cwd
是工作目錄,調試程式在開始調試前會通過
cd
指令打開這個目錄,預設是項目根目錄,這裡我們指定為測試程式所在的測試用目錄。
現在我們就可以在測試目錄下部署所需檔案進行調試,就和使用者通過
pip
安裝子產品後在某個工作目錄操作一樣。
現在還有個問題,如何引用未打包和安裝的子產品?
我這裡是通過
sys.path
來實作引用:
import sys
sys.path.insert(-2, "d:\\workspace\\python\\markdown-img\\src")
print(sys.path)
from markdown_img.main import Main
import os
testFile = '.\\markdown_img\\一次奇妙的網課體驗_image.md'
if os.path.exists(testFile):
os.remove(testFile)
main = Main()
main.main(True)
這裡有個要點,要使用
sys.path.insert
把我們開發中的子產品包所在目錄加入到Python第三方子產品的檢索目錄之前,也就是說要在Python檢索第三方子產品前先來檢索我們的開發目錄。
比方說我這裡的
sys.path
輸出是這樣的:
其中
'C:\\Users\\70748\\AppData\\Roaming\\Python\\Python39\\site-packages', 'D:\\software\\Coding\\Python\\lib\\site-packages'
都是第三方包安裝目錄,是以我們這裡的
insert
插入位置下标是
-2
,就是為了提高優先級,覆寫掉安裝目錄下的同名第三方子產品。
如果不這麼做,每次都需要手動解除安裝掉第三方同名子產品。