Em março de 2020, a maioria das outras respostas a essa pergunta está desatualizada há vários anos. Quando você encontrar conselhos sobre questões de empacotamento do Python, lembre-se de observar a data da publicação e não confie em informações desatualizadas.
O Guia do Usuário do Python Packaging vale uma leitura. Cada página tem uma data de "última atualização" exibida, para que você possa verificar a atualidade do manual, e é bastante abrangente. O fato de estar hospedado em um subdomínio python.org da Python Software Foundation apenas agrega credibilidade a ele. A página Resumos do projeto é especialmente relevante aqui.
Resumo das ferramentas:
Aqui está um resumo do cenário de empacotamento do Python:
Ferramentas suportadas:
distutils
ainda é a ferramenta padrão para empacotar em Python. Ele está incluído na biblioteca padrão (Python 2 e Python 3). É útil para distribuições simples do Python, mas não possui recursos. Ele apresenta o distutils
pacote Python que pode ser importado em seu setup.py
script.
setuptools
foi desenvolvido para superar as limitações do Distutils e não está incluído na biblioteca padrão. Ele introduziu um utilitário de linha de comando chamado easy_install
. Ele também introduziu o setuptools
pacote Python que pode ser importado em seu setup.py
script e o pkg_resources
pacote Python que pode ser importado em seu código para localizar arquivos de dados instalados com uma distribuição. Um de seus truques é que ele corrige o distutils
pacote Python. Deve funcionar bem com pip
. Vê lançamentos regulares.
scikit-build
é um gerador de sistema de compilação aprimorado que usa internamente o CMake para criar extensões Python compiladas. Como o scikit-build não é baseado em distutils, ele realmente não tem nenhuma de suas limitações. Quando o ninja-build está presente, o scikit-build pode compilar grandes projetos três vezes mais rápido que as alternativas. Deve funcionar bem com pip
.
distlib
é uma biblioteca que fornece funcionalidade usada por ferramentas de nível superior como pip
.
packaging
também é uma biblioteca que fornece funcionalidade usada por ferramentas de nível superior como pip
esetuptools
Ferramentas obsoletas / abandonadas:
distribute
foi um garfo de setuptools
. Ele compartilhava o mesmo espaço para nome; portanto, se você tivesse o Distribute instalado, import setuptools
realmente importaria o pacote distribuído com o Distribute. O Distribute foi mesclado novamente no Setuptools 0.7 , para que você não precise mais usar o Distribute. De fato, a versão no Pypi é apenas uma camada de compatibilidade que instala o Setuptools.
distutils2
foi uma tentativa de tirar o melhor de distutils
, setuptools
e distribute
e tornar-se a ferramenta padrão incluída na biblioteca padrão do Python. A idéia era que distutils2
seria distribuído para versões antigas do Python e que distutils2
seria renomeado packaging
para Python 3.3, que o incluiria em sua biblioteca padrão. Esses planos não foram como pretendidos, no entanto, e atualmente, distutils2
é um projeto abandonado . A versão mais recente foi em março de 2012 e sua página inicial do Pypi foi finalmente atualizada para refletir sua morte.
Outras:
Existem outras ferramentas, se você estiver interessado, leia os resumos do projeto no Guia do Usuário de Empacotamento do Python. Não vou enumerá-los todos, para não repetir essa página, e para manter a resposta correspondente a questão, que foi apenas distribute
, distutils
, setuptools
e distutils2
.
Recomendação:
Se tudo isso é novo para você e você não sabe por onde começar, eu recomendaria aprendersetuptools
, junto com pip
e virtualenv
, que todos funcionam muito bem juntos.
Se você está olhando para virtualenv
, você pode estar interessado neste pergunta: Qual é a diferença entre venv
, pyvenv
, pyenv
, virtualenv
, virtualenvwrapper
, etc? . (Sim, eu sei, eu gemo com você.)