跳到正文
LICENTIVO / INTEGRATION

Python 軟體授權:授權碼驗證教學

為 Python 應用程式加入授權碼驗證。建立虛擬環境、啟用授權、控管功能權限,並驗證已儲存憑證的還原與拒絕存取。

Python 3.10+ · 命令列與桌面應用程式更新日期

1. 準備 Python 與受保護功能

為商業 Python 命令列工具或桌面應用程式加入客戶授權碼,在執行受保護功能前檢查權限。這些檢查控管的是你的應用程式使用權限,不會變更 Python 直譯器本身的開源授權條款。應用程式負責接收啟用輸入並提供業務回呼。

裝置額度按目前啟用裝置計算,釋放後返還;一般授權離線仍占用,浮動授權租約到期後自動返還。

  1. 在控制台「產品」複製產品 ID,點擊同一產品的「簽章公鑰」,將每一組金鑰 ID、公鑰填入初始化程式碼,取代 YOUR_PRODUCT_ID、YOUR_KEY_ID 和 YOUR_PUBLIC_KEY。快速接入也可直接複製已填好的程式碼。無需設定檔;SDK 預設連線至 https://www.licentivo.com。
  2. 安裝 Python 3.10 或更新版本,建立專案目錄。
  3. 在 Licentivo 快速整合中建立或選擇產品,讓策略與授權允許不計次的 export 功能。

2. 在虛擬環境安裝 SDK

在自己的應用程式專案中執行下方安裝命令或加入建置依賴,安裝 SDK 0.11.6。套件管理器負責取得 SDK,無需下載解壓原始碼套件或設定本機原始碼路徑。

Windows · PowerShell
python -m venv .venv
./.venv/Scripts/python.exe -m pip install "licentivo-sdk==0.11.6"
Linux / macOS · Bash
python3 -m venv .venv
./.venv/bin/python -m pip install "licentivo-sdk==0.11.6"

3. 匯出前驗證授權

將 SDK 初始化接到自己軟體的啟動或啟用入口,從啟用視窗讀取客戶授權碼,傳入產品 ID、信任公鑰並保持用戶端存活。將 run_feature 放在實際業務入口,以自己的功能取代匯出範例函式。

Python · 完整 app.py
"""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)
Windows · PowerShell
$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.py
Linux / macOS · Bash
export 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.py

4. 在桌面應用程式中保留用戶端

命令列匯出可使用 with 包住整個操作。桌面應用程式在啟用時建立用戶端,保留至視窗關閉,不要每次按下按鈕都重新建立與關閉。

將連線啟用與其他網路作業放在 GUI 執行緒之外執行,再切回介面執行緒更新結果。Tkinter 桌面範例透過下方文件連結另行提供;pip 套件不包含該範例的原始碼。

每個匯出按鈕、快捷鍵與命令都呼叫 client.run_feature("export", lambda: export_report(path))。結束時呼叫 close,保留裝置綁定紀錄,並嘗試歸還浮動席位。

重新啟動時,在相同產品、作業系統使用者及快取路徑下傳入空金鑰,恢復裝置憑證。離線啟動仍取決於有效簽章與授權策略;浮動授權及必須連線的啟動需要伺服器確認。

5. 驗證允許與拒絕的操作

  1. 以測試金鑰啟用,檢查實際產生的匯出檔案。
  2. 移除 LICENTIVO_LICENSE_KEY,以相同虛擬環境與作業系統使用者重新啟動,確認裝置憑證被恢復。
  3. 將 LICENTIVO_FEATURE 設為授權中不存在的功能,LICENTIVO_OUTPUT 設為新檔名。應回傳非零結束碼,且不產生新匯出檔。
  4. 啟用計次前先設定次數規則,設定 LICENTIVO_METERED=1,並為持久業務工作提供 LICENTIVO_OPERATION_ID。確認成功業務只扣一次。

排查安裝與授權問題

檢查產品 ID、每組金鑰 ID 和公鑰、客戶輸入的授權碼。公鑰屬於產品;客戶授權與本機憑證分別管理。開發測試授權碼及廠商管理 API Key 不隨客戶安裝包發送。

ModuleNotFoundError 通常是 pip 與應用程式使用了不同的 Python。安裝與執行都使用同一虛擬環境的直譯器。

授權到期或功能被拒絕時必須停止業務,顯示 SDK 錯誤及可用的請求編號,不要在檢查失敗後直接呼叫匯出函式。

計次操作需要連線。保留穩定工作編號與持久結果,以便恢復待確認工作而不重複執行業務。不要分發簽章快取、裝置憑證、測試金鑰或廠商管理 Key。