天天看點

Python學習筆記番外:子產品開發中的debugPython學習筆記番外:子產品開發中的debug

Python學習筆記番外:子產品開發中的debug

因為興趣使然和現實需要的關系,我寫了個Python子產品——markdown_img。

在編寫和更新的過程中,其中很大一部分時間花費在了研究如何打包和debug上了。

一開始我是在子產品目錄下編寫測試程式,但後來發現這樣并不能模拟通過

pip

安裝後使用者實際上使用的環境。

與此同時,在源碼目錄下放置測試程式和測試用的md檔案和圖檔也不妥,更不友善于打包。

後來我無奈之下都是打包->pip安裝->運作一條龍,循環往複,每次打包就要等一會,巨麻煩。

今天偶然想起VSCode在調試目前項目的時候是通過一個配置檔案的,那是不是可以通過那個配置檔案來設定整個項目的測試入口和環境?

Python學習筆記番外:子產品開發中的debugPython學習筆記番外:子產品開發中的debug

的确如此,可以在

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

,就是為了提高優先級,覆寫掉安裝目錄下的同名第三方子產品。

如果不這麼做,每次都需要手動解除安裝掉第三方同名子產品。