Python tem uma história confusa, de ferramentas que podem ser utilizadas para embalar e descrever projetos: estes incluem distutils
na biblioteca padrão, distribute
, distutils2
, e setuptools
(e talvez mais). Parece que distribute
e distutils2
foram descontinuados em favor de setuptools
, o que deixa dois padrões concorrentes.
No meu entender, setuptools
oferece muito mais opções (por exemplo, declarar dependências, testes etc.) do que distutils
, no entanto, ainda não está incluído na biblioteca padrão do Python (ainda?).
O Guia do Usuário do Python Packaging [ 1 ] recomenda agora:
Use
setuptools
para definir projetos e criar distribuições de origem.
E explica:
Embora você possa usar pure
distutils
para muitos projetos, ele não suporta a definição de dependências em outros projetos e faltam vários utilitários de conveniência para preencher automaticamente os metadados do pacote corretamente fornecidos porsetuptools
. Estando fora da biblioteca padrão, o setuptools também oferece um conjunto de recursos mais consistente em diferentes versões do Python e (ao contráriodistutils
),setuptools
será atualizado para produzir os próximos formatos padrão "Metadados 2.0" em todas as versões suportadas.Mesmo para projetos que optam por usar
distutils
, quando o pip instala esses projetos diretamente da fonte (em vez de instalar a partir de um arquivo de roda pré-construído), ele realmente cria seu projeto usandosetuptools
.
No entanto, examinar vários arquivos setup.py do projeto revela que esse não parece ser um padrão real. Muitos pacotes ainda usam distutils
e aqueles que suportam setuptools
frequentemente se misturam setuptools
com, distutils
por exemplo, fazendo uma importação de fallback:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Seguido de uma tentativa de encontrar uma maneira de escrever uma configuração que pode ser instalada por ambos setuptools
e distutils
. Isso geralmente inclui várias formas de verificação de dependência propensa a erros, pois distutils
não suporta dependências na função de configuração.
Por que as pessoas ainda estão fazendo um esforço extra para apoiar distutils
- o fato de setuptools
não estar na biblioteca padrão é o único motivo? Quais são as vantagens distutils
e existem desvantagens de gravar arquivos setup.py que suportam apenas setuptools
.
setuptools
é uma alternativa aprimorada, distutils
mas observe que " O instalador recomendado do pip executa todos os scripts setup.py setuptools
, mesmo que o próprio script seja importadodistutils
" ( origem )
distutils
foi mesclado novamentesetuptools
, mas há aplicativos herdados que foram gravados para usodistutils
e há custos envolvidos na migração para corrigir os padrões.