1. Prepare Python y una función con licencia
Añade claves de licencia de clientes a una aplicación comercial Python de escritorio o de línea de comandos y comprueba los permisos antes de ejecutar una función protegida. Estos controles regulan el acceso a tu aplicación y no cambian la licencia de código abierto del intérprete Python. La aplicación recibe la clave de activación y proporciona el callback de la operación.
La cuota cuenta las activaciones actuales y se recupera al liberarlas. Las licencias normales cuentan sin conexión; las flotantes también liberan cuota al vencer su arrendamiento.
- Copia el ID del producto en Consola > Productos. Abre las claves públicas de firma del mismo producto y pega todos los pares ID de clave/clave pública en el código de inicialización, sustituyendo YOUR_PRODUCT_ID, YOUR_KEY_ID y YOUR_PUBLIC_KEY. La integración rápida puede generar este código. No hace falta un archivo de configuración; el SDK usa https://www.licentivo.com de forma predeterminada.
- Instale Python 3.10 o posterior y cree un directorio de proyecto.
- En la integración Licentivo Quick, cree o seleccione un producto con una función de exportación no medida permitida por su política y licencia.
2. Instalar en un entorno virtual
Instala el SDK 0.11.6 con el siguiente comando en tu proyecto o añade la dependencia de compilación. El gestor de paquetes obtiene el SDK; no necesitas descargar y extraer código fuente ni configurar rutas locales.
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. Validar la licencia antes de exportar
Inicializa el SDK al iniciar o activar tu programa. Lee la clave del cliente en el formulario y pasa el ID del producto y las claves de confianza. Mantén el cliente hasta cerrar. Coloca run_feature en la operación real y sustituye la exportación por tu propia función.
"""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. Mantenga vivo al cliente en una aplicación de escritorio.
Para una exportación de línea de comandos, el bloque with puede cubrir toda la operación. Para una aplicación de escritorio, abra el cliente durante la activación y manténgalo hasta que se cierre la ventana; no cree ni cierre un cliente por cada clic en un botón.
Ejecuta la activación en línea y las demás operaciones de red fuera del hilo de la GUI y devuelve los resultados al hilo de la interfaz. El ejemplo de escritorio Tkinter se ofrece por separado mediante el enlace a la documentación de abajo; instalar el paquete pip no instala su código fuente.
Cada botón, acceso directo o comando de exportación debe invocar client.run_feature("export", lambda: export_report(path)). Al apagar, llame a cerrar; conserva un registro vinculado al dispositivo e intenta devolver un asiento flotante.
Los inicios posteriores pasan una clave de licencia vacía con el mismo producto, usuario y ruta de caché para restaurar la credencial del dispositivo guardada. El inicio sin conexión aún depende de una concesión firmada válida y de la política de licencia; El inicio flotante y solo en línea necesita confirmación del servidor.
5. Verifique las rutas permitidas y denegadas.
- Actívelo usando su clave de prueba e inspeccione el informe resultante.
- Desarme LICENTIVO_LICENSE_KEY y reinicie con el mismo entorno virtual y usuario del sistema operativo. Confirme las restauraciones de credenciales del dispositivo guardado.
- Establezca LICENTIVO_FEATURE en una función ausente de la licencia y LICENTIVO_OUTPUT en un nuevo nombre de archivo. Espere un código de salida distinto de cero y ninguna exportación nueva.
- Si habilita la medición, primero configure la regla de uso, establezca LICENTIVO_METERED=1 y proporcione LICENTIVO_OPERATION_ID para la tarea comercial duradera. Verifique que el trabajo exitoso disminuya su contador una vez.
Limite las exportaciones de archivos con un contador de uso mensual
Solucionar problemas de instalación y autorización
Comprueba el ID del producto, todos los pares ID de clave/clave pública y la licencia del cliente. Las claves públicas pertenecen al producto; las licencias y credenciales de dispositivo son independientes. No distribuyas claves de prueba ni API Keys de gestión.
ModuleNotFoundError generalmente significa que pip y la aplicación utilizan diferentes intérpretes de Python. Utilice el mismo entorno virtual ejecutable para ambos comandos.
Una licencia caducada o una función denegada debe detener la operación. Mostrar el error SDK y solicitar ID cuando esté disponible; no ejecute la devolución de llamada de exportación después de una verificación fallida.
Las operaciones medidas requieren acceso a la red. Mantenga una ID de tarea estable y un resultado duradero para que la confirmación pendiente pueda recuperarse sin tener que repetir el trabajo. No distribuya concesiones almacenadas en caché, credenciales de dispositivos, claves de prueba o claves de administración de proveedores.