由於打包程式時, 要附上 ddddocr 的 .onnx 檔案, 但 site.getsitepackages() 會回傳多個值, 是site-packages 和它的上一層。原本的寫法會出錯:
for /f "delims=" %%i in ('python -c "import site; print(site.getsitepackages()[0])"') do (set python_site_packages=%%i)
方案一:讓 Python 找到 ddddocr 模組的路徑(推薦)
這個方法是最可靠的,因為它直接詢問 Python ddddocr 模組被安裝在哪裡。它會直接回傳包含 ddddocr 模組的資料夾路徑。
程式碼片段
@echo off
setlocal
:: 讓 Python 找到 ddddocr 模組的安裝根目錄
for /f "delims=" %%i in ('python -c "import ddddocr, os; print(os.path.dirname(ddddocr.__file__))"') do (
set "ddddocr_path=%%i"
)
:: 檢查路徑是否成功設置
if not defined ddddocr_path (
echo Error: Failed to find ddddocr module path.
goto :eof
)
echo ddddocr module found at: %ddddocr_path%
:: 執行複製操作
copy /Y "%ddddocr_path%\*.onnx" "dist\your-project\_internal\ddddocr"
endlocal
方案二:遍歷 site.getsitepackages() 的所有路徑(備用方案)
如果您堅持使用 site.getsitepackages(),則需要一個稍微複雜的 Python 腳本來檢查這些路徑中哪一個包含 ddddocr 資料夾。
程式碼片段
@echo off
setlocal
:: 使用 Python 腳本遍歷所有 site-packages 路徑,並找出包含 ddddocr 的那一個。
:: 腳本會直接輸出包含 ddddocr 模組的 site-packages 路徑。
for /f "delims=" %%i in ('python -c "import site, os; found_path = None; for p in site.getsitepackages(): if os.path.isdir(os.path.join(p, 'ddddocr')): found_path = p; break; print(found_path or '')"') do (
set "python_site_packages=%%i"
)
:: 檢查路徑是否成功設置
if not defined python_site_packages (
echo Error: Failed to find ddddocr in any site-packages path.
goto :eof
)
echo ddddocr found in site-packages at: %python_site_packages%
:: 執行複製操作
copy /Y "%python_site_packages%\ddddocr\*.onnx" "dist\your-project\_internal\ddddocr"
endlocal
選擇建議
我是選擇使用方案1.