Como especificar dependências de sistema externo para um pacote Python?

Sep 22 2020

Ao escrever um pacote Python, eu sei como especificar outros pacotes Python necessários no setup.pyarquivo graças ao campo install_requiresde setuptools.setup.

No entanto, não sei como especificar dependências externas do sistema que NÃO são pacotes Python, ou seja, comandos como gitou cmake(exemplos) que meu pacote poderia chamar por meio de subprocess.callou subprocess.Popen?

Devo verificar manualmente a disponibilidade dos comandos em meu setup.pyarquivo ou existe uma maneira sofisticada de especificar os requisitos do sistema?

Edit: Eu só quero poder verificar se as ferramentas externas estão disponíveis e se não convidar o usuário a instalá-las (por conta própria). Não quero gerenciar a instalação de ferramentas externas ao instalar o pacote.

Resumo das contribuições: parece que setuptoolsnão tem suporte para isso, e seria mais seguro fazer a verificação em tempo de execução (cf comentários e respostas).

Respostas

4 sinoroc Sep 23 2020 at 20:02

Minha recomendação seria verificar a presença dessas dependências externas não no momento da instalação, mas no tempo de execução . No início de cada execução ou talvez na primeira execução.

É verdade que você pode adicionar isso ao seu setup.py, mas setup.pynem sempre é executado no momento da instalação: por exemplo, se seu projeto for empacotado como uma roda , ele nem mesmo contém o setup.pyarquivo. E mesmo que você não distribua seu projeto como uma roda, se não me engano o pip tende a construir uma roda localmente e reutilizá-la nas instalações subsequentes.

Portanto, embora seja possível fazer essas verificações como parte do script de instalação no momento da instalação (desde que você possa garantir a presença e execução do setup.py), eu diria que o tempo de execução é uma aposta mais segura.