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:
distutilsainda é 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 distutilspacote Python que pode ser importado em seu setup.pyscript.
setuptoolsfoi 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 setuptoolspacote Python que pode ser importado em seu setup.pyscript e o pkg_resourcespacote 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 distutilspacote 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.
packagingtambém é uma biblioteca que fornece funcionalidade usada por ferramentas de nível superior como pipesetuptools
Ferramentas obsoletas / abandonadas:
distributefoi um garfo de setuptools. Ele compartilhava o mesmo espaço para nome; portanto, se você tivesse o Distribute instalado, import setuptoolsrealmente 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.
distutils2foi uma tentativa de tirar o melhor de distutils, setuptoolse distributee tornar-se a ferramenta padrão incluída na biblioteca padrão do Python. A idéia era que distutils2seria distribuído para versões antigas do Python e que distutils2seria renomeado packagingpara 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, setuptoolse distutils2.
Recomendação:
Se tudo isso é novo para você e você não sabe por onde começar, eu recomendaria aprendersetuptools , junto com pipe 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ê.)