Com a seguinte estrutura de pacotes
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Conteúdo de setup.py
from setuptools import setup
setup()
Conteúdo de setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Eu posso construir rodas ou uma distribuição de fontes para my_package
isso
pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz
Mas, de acordo com o mantenedor do setuptools , uma configuração de compilação declarativa é ideal e usar uma compilação imperativa será um cheiro de código. Então substituímos setup.py
por pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Conteúdo de pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
E você ainda pode montar uma roda da mesma maneira que antes, ela funciona. Mas sdist não funciona:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Então, como você realmente deve criar o arquivo .tar.gz usando o setuptools ? Qual é a ferramenta voltada ao usuário para criar sdist? Não quero alterar o back-end da compilação. Parece que outras ferramentas de empacotamento escrevem seus próprios pontos de entrada de construção, mas achei que o objetivo principal de definir um sistema declarativo de construção nos metadados era para que você não precisasse trabalhar com o sistema de construção, aprendendo como cada espera-se que uma ferramenta de empacotamento diferente seja chamada ou precise entrar no interpretador e chamar uma API Python manualmente. Mas o PEP para requisitos de sistema de compilação já tem mais de 2 anos. Estou perdendo algo óbvio aqui?
Como criar uma distribuição de origem sem usar o setup.py
arquivo?
fonte
pep517.build
que é apenas um experimento, uma muleta temporária quando existem ferramentas produtivas como esvoaçante, poesia, escotilha e provavelmente até mais?pep517.build
é uma ferramenta simples criada exatamente para esse fim.pep517.build
era um deles. Mas de maneira alguma, na verdade, é um front-end de compilação. A hachura também não está pronta para o PEP517, como eu vejo agora.Não há nada "óbvio" quando se trata de embalagens Python. De fato, por enquanto, pelo menos se você estiver usando distutils / setuptools, é necessário criar um
setup.py
arquivo (quase) vazio , mesmo se você estiver usando um totalmente declarativosetup.cfg
:Eu também recomendo
chmod +x setup.py
.Nesse caso, você está apenas escrevendo o "ponto de entrada" para o sistema de construção e
setup()
é apenas amain()
função para ele - mas agora todos os argumentos que eram tradicionalmente passadossetup()
podem ser lidossetup.cfg
.Agora você ainda pode usar
setup.py sdist
se quiser criar um tarball de origem:./setup.py sdist
Você também pode tentar um dos sistemas de compilação alternativos ativados via
pyproject.toml
, como o Flit .fonte
setup.cfg
significa quesetup.py
não é mais necessário usar o setuptools, o que não é verdade. Só porque o título da pergunta é enganoso, não significa que a resposta seja. Eles escreveram no corpo da pergunta "Então, como você realmente deve criar o arquivo .tar.gz usando o setuptools ?" que isso responde corretamente.