Pip: Suporte de URL direto PEP 508 e instalação de subdependências do Git

Criado em 3 jul. 2018  ·  3Comentários  ·  Fonte: pypa/pip

  • Versão do Pip: 10.0.1
  • Versão Python: 3.7.0
  • Sistema operacional: macOS

Passei o dia inteiro lendo sobre como instalar subdependências do git e ainda estou lutando para encontrar a solução correta.

Meu caso de uso

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'
    ],
...
auto-locked support

Comentários muito úteis

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.

Todos 3 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações