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 installpython setup.py developpython setup.py sdistpython 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.
Onde posso ler mais sobre isso?¶
Por que você não deveria invocar setup.py diretamemente (inglês) por Paul Ganssle