Passei o dia inteiro lendo sobre como instalar subdependências do git e ainda estou lutando para encontrar a solução correta.
Eu fiz um fork de uma biblioteca Python existente (disponível no PyPi), adicionei algumas mudanças que são improváveis de serem mescladas no upstream.
Alguns dos meus projetos dependem da bifurcação da biblioteca. Anteriormente, era um aplicativo e eu estava usando o Pipenv para gerenciar dependências de aplicativos, onde poderia facilmente especificar a instalação de branch / commit específico do Git no Pipfile. Meu aplicativo cresceu e agora estou convertendo em biblioteca (não vai ser publicado no PyPi). Preciso resolver o problema das subdependências do Git para a biblioteca.
Eu li pelo menos as seguintes edições: # 3610, # 4187, # 2124, # 5384 e muitos outros e, claro, PEP. Quando terminei de ler, fiquei ainda mais confuso do que quando comecei.
Pelo que entendi com a implementação do PEP-508 no pip 10, devo ser capaz de usar:
setup(
name='dmfigol',
...
install_requires=[
"requests",
'smartsheet-python-sdk @ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3',
],
)
Mas não funciona:
-> % pip install git+https://<private-git>/dmfigol/my-test-project.git
Collecting git+https://<private-git>/dmfigol/my-test-project.git
...
Direct url requirement (like smartsheet-python-sdk@ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3) are not allowed for dependencies
Minhas perguntas:
1) Fiz algo errado ou não é compatível?
2) Se não houver suporte, ele será compatível?
3) Eu entendi corretamente que também posso usar uma sintaxe semelhante em pyproject.toml
se eu quiser migrar de setup.py para algo mais declarativo?
4) A única solução disponível hoje é usar a seção --process-dependency-links
e dependency_links
em setup.py
?
5) O que acontece quando o upstream atualiza a biblioteca no PyPi para 1.3.4 ou superior e eu ainda gostaria de usar minha versão 1.3.3 bifurcada?
Obrigado
UPD: a solução atualmente em funcionamento até que # 4187 seja implementada se você topar com este tópico:
setup(
...
install_requires=[
"smartsheet-python-sdk==10.1.3.3",
],
dependency_links=[
'https://github.com/dmfigol/smartsheet-python-sdk/archive/no-setuptools-scm.zip#egg=smartsheet-python-sdk-10.1.3.3'
],
...
Eu fiz algo errado ou isso não é compatível?
Os requisitos de URL PEP 508 como dependências não são suportados.
Se não houver suporte, ele será compatível?
sim. Veja abaixo.
Eu entendi corretamente que também posso usar uma sintaxe semelhante em pyproject.toml se eu quiser migrar de setup.py para algo mais declarativo?
pyproject.toml
serve apenas como um lugar para especificar as dependências de tempo de construção e para ter configuração de ferramentas. Qualquer coisa diferente disso é implementada pelas ferramentas que você está usando.
A única solução disponível hoje é usar a seção --process-dependency-links e dependency_links em setup.py?
sim. Essa é toda a motivação por trás do # 4187.
Desativamos a capacidade de usar os requisitos de URL PEP 508 em dependências, uma vez que não queremos que um pacote instalado do PyPI resulte no pip chegando a um URL arbitrário da web. Basicamente, pip install spam
não deve fazer com que o pip alcance nada, exceto o PyPI.
A solução atual proposta em # 4187 é simplesmente modificar a condicional de bloqueio para que ela apenas bloqueie dependências de URL quando um pacote estiver sendo instalado diretamente do PyPI, de modo que qualquer outro modo de instalação possa usar dependências de URL PEP 508.
Obrigado pela explicação detalhada, eu realmente aprecio sua ajuda.
Este tópico foi bloqueado automaticamente, pois não houve nenhuma atividade recente depois que foi fechado. Abra um novo problema para bugs relacionados.
Comentários muito úteis
Os requisitos de URL PEP 508 como dependências não são suportados.
sim. Veja abaixo.
pyproject.toml
serve apenas como um lugar para especificar as dependências de tempo de construção e para ter configuração de ferramentas. Qualquer coisa diferente disso é implementada pelas ferramentas que você está usando.sim. Essa é toda a motivação por trás do # 4187.
Desativamos a capacidade de usar os requisitos de URL PEP 508 em dependências, uma vez que não queremos que um pacote instalado do PyPI resulte no pip chegando a um URL arbitrário da web. Basicamente,
pip install spam
não deve fazer com que o pip alcance nada, exceto o PyPI.A solução atual proposta em # 4187 é simplesmente modificar a condicional de bloqueio para que ela apenas bloqueie dependências de URL quando um pacote estiver sendo instalado diretamente do PyPI, de modo que qualquer outro modo de instalação possa usar dependências de URL PEP 508.