Ir para o conteúdo
LICENTIVO / INTEGRATION

Licenciamento em Python: validar chaves

Adicione validação de licenças a um aplicativo Python. Crie um ambiente virtual, ative uma licença e teste permissões, credenciais salvas e acessos negados.

Python 3.10+ · linha de comando e desktopAtualizado

1. Prepare Python e um recurso licenciado

Adicione chaves de licença de clientes a um aplicativo comercial Python de linha de comando ou desktop e verifique a permissão antes de executar uma função protegida. Essas verificações controlam o acesso ao seu aplicativo e não alteram a licença de código aberto do interpretador Python. O aplicativo recebe a chave de ativação e fornece o callback da operação.

A cota conta as ativações atuais e retorna ao liberá-las. Licenças comuns continuam contando offline; licenças flutuantes também devolvem a cota quando a concessão expira.

  1. Copie o ID do produto em Console > Produtos. Abra as chaves públicas de assinatura do mesmo produto e insira todos os pares ID da chave/chave pública no código de inicialização, substituindo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. A integração rápida pode gerar esse código. Não é necessário um arquivo de configuração; o SDK usa https://www.licentivo.com por padrão.
  2. Instale o Python 3.10 ou posterior e crie um diretório de projeto.
  3. Na integração rápida do Licentivo, crie ou selecione um produto com recurso de exportação ilimitada permitido por sua política e licença.

2. Instale em um ambiente virtual

Instale o SDK 0.11.6 com o comando abaixo no seu projeto ou adicione a dependência de compilação. O gerenciador de pacotes obtém o SDK; não é preciso baixar e extrair código-fonte nem configurar caminhos locais.

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. Valide a licença antes de exportar

Inicialize o SDK ao iniciar ou ativar seu software. Leia a chave do cliente no formulário e passe o ID do produto e as chaves confiáveis. Mantenha o cliente até o encerramento. Coloque run_feature na operação real e substitua a exportação pela sua função.

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. Mantenha o cliente ativo em um aplicativo de desktop

Para uma exportação de linha de comando, o bloco with pode cobrir toda a operação. Para uma aplicação desktop, abra o cliente durante a ativação e mantenha-o até a janela fechar; não crie e feche um cliente para cada clique de botão.

Execute a ativação online e as demais operações de rede fora da thread da GUI e envie os resultados de volta à thread da interface. O exemplo desktop em Tkinter é fornecido separadamente pelo link da documentação abaixo; a instalação do pacote pip não instala o código-fonte desse exemplo.

Cada botão, atalho ou comando de exportação deve invocar client.run_feature("export", lambda: export_report(path)). Ao desligar, feche a chamada; ele retém um registro vinculado ao dispositivo e tenta retornar um assento flutuante.

Posteriormente, começa a passar uma chave de licença vazia com o mesmo produto, usuário e caminho de cache para restaurar a credencial do dispositivo salva. A inicialização offline ainda depende de uma concessão válida assinada e da política de licença; a inicialização flutuante e somente online precisa de confirmação do servidor.

5. Verifique os caminhos permitidos e negados

  1. Ative usando sua chave de teste e inspecione o relatório resultante.
  2. Desmarque LICENTIVO_LICENSE_KEY e reinicie com o mesmo ambiente virtual e usuário do sistema operacional. Confirme as restaurações de credenciais do dispositivo salvas.
  3. Defina LICENTIVO_FEATURE como um recurso ausente da licença e LICENTIVO_OUTPUT como um novo nome de arquivo. Espere um código de saída diferente de zero e nenhuma nova exportação.
  4. Se você ativar a medição, primeiro configure a regra de uso, defina LICENTIVO_METERED=1 e forneça LICENTIVO_OPERATION_ID para a tarefa comercial durável. Verifique se o trabalho bem-sucedido diminui seu contador uma vez.

Solucionar problemas de instalação e autorização

Confira o ID do produto, todos os pares ID da chave/chave pública e a licença do cliente. As chaves públicas pertencem ao produto; licenças e credenciais de dispositivos são separadas. Não distribua chaves de teste ou API Keys de gerenciamento.

ModuleNotFoundError geralmente significa que pip e o aplicativo estão usando diferentes interpretadores Python. Use o mesmo executável de ambiente virtual para ambos os comandos.

Uma licença expirada ou recurso negado deverá interromper a operação. Exibir o erro SDK e solicitar ID quando disponível; não execute o retorno de chamada de exportação após uma verificação com falha.

As operações limitadas requerem acesso à rede. Mantenha um ID de tarefa estável e um resultado durável para que a confirmação pendente possa ser recuperada sem repetir o trabalho. Não distribua concessões em cache, credenciais de dispositivos, chaves de teste ou chaves de gerenciamento de fornecedores.