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.
- 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.
- Instale o Python 3.10 ou posterior e crie um diretório de projeto.
- 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.
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. 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.
"""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. 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.
Como transferir uma licença de software para outro computador
5. Verifique os caminhos permitidos e negados
- Ative usando sua chave de teste e inspecione o relatório resultante.
- 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.
- 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.
- 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.
Limite as exportações de arquivos com um contador de uso mensal
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.