1. Preparare Python e una funzionalità concessa in licenza
Aggiungi chiavi di licenza per i clienti a un'applicazione commerciale Python da riga di comando o desktop e controlla i permessi prima di eseguire una funzione protetta. Questi controlli regolano l'accesso alla tua applicazione e non modificano la licenza open source dell'interprete Python. L'app fornisce l'interfaccia di attivazione e la callback dell'operazione.
La quota conta le attivazioni correnti e viene restituita al rilascio. Le licenze ordinarie contano anche offline; quelle flottanti restituiscono la quota anche alla scadenza del lease.
- Copia l’ID prodotto da Console > Prodotti. Apri le chiavi pubbliche di firma dello stesso prodotto e inserisci tutte le coppie ID chiave/chiave pubblica nel codice di inizializzazione, sostituendo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. L’integrazione rapida può generare il codice. Non serve un file di configurazione; l’SDK usa https://www.licentivo.com per impostazione predefinita.
- Installa Python 3.10 o versione successiva e crea una directory di progetto.
- In Licentivo Integrazione rapida, crea o seleziona un prodotto con una funzionalità di esportazione illimitata consentita dalla sua politica e licenza.
2. Installare in un ambiente virtuale
Installa SDK 0.11.6 eseguendo il comando seguente nel tuo progetto o aggiungendo la dipendenza di compilazione. Il gestore di pacchetti scarica SDK; non servono archivi sorgente, estrazione manuale o percorsi locali.
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. Convalidare la licenza prima dell'esportazione
Inizializza l’SDK all’avvio o nel gestore di attivazione della tua applicazione. Leggi la chiave cliente dal modulo e passa ID prodotto e chiavi attendibili. Mantieni il client fino alla chiusura. Inserisci run_feature nell’operazione reale e sostituisci l’esportazione con la tua funzione.
"""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. Mantieni attivo il client in un'applicazione desktop
Per un'esportazione da riga di comando, il blocco with può coprire l'intera operazione. Per un'applicazione desktop, aprire il client durante l'attivazione e mantenerlo fino alla chiusura della finestra; non creare e chiudere un client per ogni clic sul pulsante.
Esegui l'attivazione online e le altre operazioni di rete fuori dal thread della GUI, quindi riporta i risultati al thread dell'interfaccia. L'esempio desktop Tkinter è disponibile separatamente tramite il link alla documentazione qui sotto; l'installazione del pacchetto pip non ne installa il sorgente.
Ogni pulsante, scorciatoia o comando di esportazione deve richiamare client.run_feature("export", lambda: export_report(path)). All'arresto chiama chiusura; mantiene una registrazione legata al dispositivo e tenta di restituire una postazione mobile.
Successivamente viene avviata la trasmissione di una chiave di licenza vuota con lo stesso prodotto, utente e percorso cache per ripristinare le credenziali del dispositivo salvate. L'avvio offline dipende ancora da una concessione firmata valida e dalla politica di licenza; L'avvio mobile e solo online richiede la conferma del server.
5. Verificare i percorsi consentiti e negati
- Attiva utilizzando la chiave di prova e controlla il rapporto risultante.
- Annulla l'impostazione LICENTIVO_LICENSE_KEY e riavvia con lo stesso ambiente virtuale e utente del sistema operativo. Conferma i ripristini delle credenziali del dispositivo salvate.
- Imposta LICENTIVO_FEATURE su una funzionalità assente dalla licenza e LICENTIVO_OUTPUT su un nuovo nome file. È previsto un codice di uscita diverso da zero e nessuna nuova esportazione.
- Se abiliti la misurazione, configura prima la regola di utilizzo, imposta LICENTIVO_METERED=1 e fornisci LICENTIVO_OPERATION_ID per l'attività aziendale durevole. Verificare che il lavoro riuscito diminuisca il suo contatore una volta.
Limita le esportazioni di file con un contatore di utilizzo mensile
Risolvere i problemi di installazione e autorizzazione
Controlla ID prodotto, tutte le coppie ID chiave/chiave pubblica e la licenza del cliente. Le chiavi pubbliche appartengono al prodotto; licenze e credenziali dei dispositivi sono separate. Non distribuire chiavi di test o API Key di gestione.
ModuleNotFoundError in genere significa che pip e l'app utilizzano interpreti Python diversi. Utilizzare lo stesso eseguibile dell'ambiente virtuale per entrambi i comandi.
Una licenza scaduta o una funzionalità negata devono interrompere l'operazione. Visualizza l'errore SDK e richiedi l'ID quando disponibile; non eseguire la callback dell'esportazione dopo un controllo non riuscito.
Le operazioni a consumo richiedono l'accesso alla rete. Mantieni un ID attività stabile e un risultato duraturo in modo che la conferma in sospeso possa essere ripristinata senza ripetere il lavoro. Non distribuire autorizzazioni memorizzate nella cache, credenziali del dispositivo, chiavi di test o chiavi di gestione del fornitore.