setup.py foi descontinuado?#

Não, setup.py e Setuptools não foram descontinuados.

Setuptools é perfeitamente utilizável como um backend de construção para empacotar projetos Python. E setup.py é um arquivo de configuração válido para Setuptools que é escrito em Python, em vez de em TOML por exemplo (uma prática semelhante é usada por outras ferramentas como nox e seu arquivo de configuração noxfile.py, ou pytest e conftest.py).

No entanto, python setup.py e o uso de setup.py como uma ferramenta de linha de comando foram descontinuados.

Isso significa que comandos como os seguintes NÃO DEVEM ser mais executados:

  • python setup.py install

  • python setup.py develop

  • python setup.py sdist

  • python setup.py bdist_wheel

Quais comandos devem ser usados?#

Descontinuado

Recomendação

python setup.py install

python -m pip install .

python setup.py develop

python -m pip install --editable .

python setup.py sdist

python -m build [1]

python setup.py bdist_wheel

Para instalar um projeto baseado no setuptools, era comum executar o comando install do arquivo setup.py, como, por exemplo, python setup.py install. Atualmente, o método recomendado é utilizar o pip diretamente com um comando como este: python -m pip install .. O ponto . representa o caminho do sistema de arquivos, sendo a notação para o diretório atual. De fato, o pip aceita um caminho para o diretório da árvore de fontes do projeto no sistema de arquivos local como argumento para o seu subcomando install. Portanto, este também seria um comando válido: python -m pip install caminho/para/projeto.

Quanto à instalação no modo develop, também conhecido como modo editable, em vez de python setup.py develop, é possível utilizar a opção --editable do subcomando install do pip da seguinte forma: python -m pip install --editable ..

Um método recomendado, simples e direto para construir distribuições fonte e wheels é usar a ferramenta construir com um comando como python -m build, que aciona a geração de ambos os formatos de distribuição. Se necessário, as opções --sdist e --wheel podem ser usadas para gerar apenas um ou outro. Observe que a ferramenta de construção precisa ser instalada separadamente.

O comando python setup.py install foi descontinuado na versão 58.3.0 do setuptools.

E quanto a outros comandos?#

Quais são algumas substituições para os outros comandos python setup.py?

python setup.py test#

A recomendação é usar um executor de testes como pytest.

python setup.py check, python setup.py register e python setup.py upload#

Um substituto confiável é twine:

  • python -m twine check --strict dist/*

  • python -m twine register dist/*.whl [2]

  • python -m twine upload dist/*

python setup.py --version#

Uma possível solução de substituição (entre outras) é contar com setuptools-scm:

  • python -m setuptools_scm

Comandos restantes#

Este guia não faz sugestões de soluções de substituição para esses comandos:

  • alias

  • bdist

  • bdist_dumb

  • bdist_egg

  • bdist_rpm

  • build

  • build_clib

  • build_ext

  • build_py

  • build_scripts

  • clean

  • dist_info

  • easy_install

  • editable_wheel

  • egg_info

  • install_data

  • install_egg_info

  • install_headers

  • install_lib

  • install_scripts

  • rotate

  • saveopts

  • setopt

  • upload_docs

E quanto aos comandos personalizados?#

Da mesma forma, os comandos personalizados no setup.py foram descontinuados. A recomendação é migrar esses comandos personalizados para uma ferramenta executora de tarefas ou qualquer outra ferramenta semelhante. Alguns exemplos de tais ferramentas são: chuy, make, nox ou tox, pydoit, pyinvoke, taskipy e thx.

E quanto às etapas personalizadas de construção?#

Etapas personalizadas de construção que, por exemplo, sobrescrevem etapas existentes como build_py, build_ext e bdist_wheel ou adicionam novas etapas de compilação não foram descontinuadas. Eles serão chamados automaticamente conforme o esperado.

Deve o setup.py ser excluído?#

Embora o uso de setup.py como um script executável tenha sido descontinuado, seu uso como um arquivo de configuração para setuptools é absolutamente aceitável. Provavelmente não há necessidade de modificação em setup.py.

pyproject.toml é obrigatório?#

Embora ainda não seja tecnicamente necessário, é FORTEMENTE RECOMENDADO que um projeto tenha um arquivo pyproject.toml na raiz de sua árvore de fontes com um conteúdo como este:

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

O guia Como modernizar um projeto baseado em setup.py? tem mais detalhes sobre isso.

O comportamento de fallback padrão para um frontend de construção na ausência de um arquivo pyproject.toml e sua tabela [build-system] é assumir que o backend de construção é o setuptools.

Por que? O que isso tudo quer dizer?#

Uma maneira de ver isso é que o escopo do setuptools agora foi reduzido à função de um backend de construção.

Onde posso ler mais sobre isso?#