本文へ移動
LICENTIVO / INTEGRATION

Python アプリにライセンス検証と機能制御を実装する方法

Python アプリにライセンスキー検証を実装します。仮想環境の作成、初回認証、機能の保護、保存した認証情報の復元、利用拒否の確認まで説明します。

Python 3.10+ · コマンドラインとデスクトップ更新日

1. Python とライセンスされた機能を準備します

商用の Python CLI やデスクトップアプリに顧客のライセンスキー認証を組み込み、保護する機能の実行前に権限を確認します。この仕組みは自分のアプリの利用権を管理し、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 0.11.6 を導入します。パッケージマネージャーが SDK を取得するため、ソース ZIP の取得、手動展開、ローカルソースパスの指定は不要です。

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 · complete 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 スレッドの外で実行し、結果を UI スレッドへ戻します。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 を指定します。成功した作業がカウンタを 1 回デクリメントすることを確認します。

インストールと認証のトラブルシューティングを行う

製品 ID、すべてのキー ID/公開鍵のペア、および顧客のライセンス入力を確認します。公開検証キーは製品に属します。顧客のライセンスと保存されたデバイスの認証情報は別のものです。開発テスト キーやベンダー管理 API キーを配布しないでください。

ModuleNotFoundError は通常、pip とアプリが異なる Python インタープリターを使用していることを意味します。両方のコマンドに同じ仮想環境実行可能ファイルを使用します。

ライセンスの有効期限が切れているか、機能が拒否されている場合は、操作を停止する必要があります。可能な場合は、SDK エラーとリクエスト ID を表示します。チェックが失敗した後は、エクスポート コールバックを実行しないでください。

従量制課金の操作にはネットワーク アクセスが必要です。安定したタスク ID と永続的な結果を維持することで、保留中の確認を作業を繰り返すことなく回復できます。キャッシュされた許可、デバイス認証情報、テスト キー、またはベンダー管理キーを配布しないでください。