1. 準備 Python 與受保護功能
為商業 Python 命令列工具或桌面應用程式加入客戶授權碼,在執行受保護功能前檢查權限。這些檢查控管的是你的應用程式使用權限,不會變更 Python 直譯器本身的開源授權條款。應用程式負責接收啟用輸入並提供業務回呼。
裝置額度按目前啟用裝置計算,釋放後返還;一般授權離線仍占用,浮動授權租約到期後自動返還。
- 在控制台「產品」複製產品 ID,點擊同一產品的「簽章公鑰」,將每一組金鑰 ID、公鑰填入初始化程式碼,取代 YOUR_PRODUCT_ID、YOUR_KEY_ID 和 YOUR_PUBLIC_KEY。快速接入也可直接複製已填好的程式碼。無需設定檔;SDK 預設連線至 https://www.licentivo.com。
- 安裝 Python 3.10 或更新版本,建立專案目錄。
- 在 Licentivo 快速整合中建立或選擇產品,讓策略與授權允許不計次的 export 功能。
2. 在虛擬環境安裝 SDK
在自己的應用程式專案中執行下方安裝命令或加入建置依賴,安裝 SDK 0.11.6。套件管理器負責取得 SDK,無需下載解壓原始碼套件或設定本機原始碼路徑。
python -m venv .venv
./.venv/Scripts/python.exe -m pip install "licentivo-sdk==0.11.6"python3 -m venv .venv
./.venv/bin/python -m pip install "licentivo-sdk==0.11.6"3. 匯出前驗證授權
將 SDK 初始化接到自己軟體的啟動或啟用入口,從啟用視窗讀取客戶授權碼,傳入產品 ID、信任公鑰並保持用戶端存活。將 run_feature 放在實際業務入口,以自己的功能取代匯出範例函式。
"""A protected operation to move into your own application's business handler."""
import os
import sys
from pathlib import Path
from licentivo import Client
# BEGIN LICENTIVO PRODUCT
# Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
PRODUCT_ID = 'YOUR_PRODUCT_ID'
TRUSTED_KEYS = {'YOUR_KEY_ID': 'YOUR_PUBLIC_KEY'}
# END LICENTIVO PRODUCT
def export_report(path):
# Replace this write with your existing, non-metered export operation.
Path(path).write_text('A report generated by the licensed application.\n', encoding='utf-8')
def main():
# In a GUI, read the activation input; later starts pass an empty key.
with Client.open_product(
PRODUCT_ID, TRUSTED_KEYS,
os.getenv('LICENTIVO_LICENSE_KEY', ''),
on_error=lambda error: print(f'Background verification: {error}', file=sys.stderr),
) as client:
feature = os.getenv('LICENTIVO_FEATURE', 'export')
path = os.getenv('LICENTIVO_OUTPUT', 'licensed-report.txt')
action = lambda: export_report(path)
if os.getenv('LICENTIVO_METERED') == '1':
client.run_metered_feature(feature, 1, os.getenv('LICENTIVO_OPERATION_ID', ''), action)
else:
client.run_feature(feature, action)
print(f'License OK: {feature} is available\nExport completed: {path}')
# Keep this context open until your real app exits. No Deactivate on normal exit.
if __name__ == '__main__':
try:
main()
except Exception as error:
print(str(error), file=sys.stderr)
sys.exit(2)
$env:LICENTIVO_LICENSE_KEY = 'YOUR_TEST_LICENSE_KEY'
./.venv/Scripts/python.exe app.py
# On later starts, restore the saved device credential:
Remove-Item Env:LICENTIVO_LICENSE_KEY
./.venv/Scripts/python.exe app.pyexport LICENTIVO_LICENSE_KEY='YOUR_TEST_LICENSE_KEY'
./.venv/bin/python app.py
# On later starts, restore the saved device credential:
unset LICENTIVO_LICENSE_KEY
./.venv/bin/python app.py4. 在桌面應用程式中保留用戶端
命令列匯出可使用 with 包住整個操作。桌面應用程式在啟用時建立用戶端,保留至視窗關閉,不要每次按下按鈕都重新建立與關閉。
將連線啟用與其他網路作業放在 GUI 執行緒之外執行,再切回介面執行緒更新結果。Tkinter 桌面範例透過下方文件連結另行提供;pip 套件不包含該範例的原始碼。
每個匯出按鈕、快捷鍵與命令都呼叫 client.run_feature("export", lambda: export_report(path))。結束時呼叫 close,保留裝置綁定紀錄,並嘗試歸還浮動席位。
重新啟動時,在相同產品、作業系統使用者及快取路徑下傳入空金鑰,恢復裝置憑證。離線啟動仍取決於有效簽章與授權策略;浮動授權及必須連線的啟動需要伺服器確認。
5. 驗證允許與拒絕的操作
- 以測試金鑰啟用,檢查實際產生的匯出檔案。
- 移除 LICENTIVO_LICENSE_KEY,以相同虛擬環境與作業系統使用者重新啟動,確認裝置憑證被恢復。
- 將 LICENTIVO_FEATURE 設為授權中不存在的功能,LICENTIVO_OUTPUT 設為新檔名。應回傳非零結束碼,且不產生新匯出檔。
- 啟用計次前先設定次數規則,設定 LICENTIVO_METERED=1,並為持久業務工作提供 LICENTIVO_OPERATION_ID。確認成功業務只扣一次。
排查安裝與授權問題
檢查產品 ID、每組金鑰 ID 和公鑰、客戶輸入的授權碼。公鑰屬於產品;客戶授權與本機憑證分別管理。開發測試授權碼及廠商管理 API Key 不隨客戶安裝包發送。
ModuleNotFoundError 通常是 pip 與應用程式使用了不同的 Python。安裝與執行都使用同一虛擬環境的直譯器。
授權到期或功能被拒絕時必須停止業務,顯示 SDK 錯誤及可用的請求編號,不要在檢查失敗後直接呼叫匯出函式。
計次操作需要連線。保留穩定工作編號與持久結果,以便恢復待確認工作而不重複執行業務。不要分發簽章快取、裝置憑證、測試金鑰或廠商管理 Key。