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 |
---|---|
|
|
|
|
|
|
|
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/*
Não é necessário, nem suportado em PyPI. Mas pode ser necessário em outros índices de pacotes (por exemplo, devpi).
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:
|
|
|
|
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.