Pip: Prise en charge directe de l'URL PEP 508 et installation des sous-dépendances à partir de Git

Créé le 3 juil. 2018  ·  3Commentaires  ·  Source: pypa/pip

  • Version de pépin : 10.0.1
  • Version Python : 3.7.0
  • Système d'exploitation : macOS

J'ai passé toute la journée à lire sur l'installation de sous-dépendances à partir de git et j'ai toujours du mal à trouver la bonne solution.

Mon cas d'utilisation

J'ai forké une bibliothèque Python existante (disponible sur PyPi), ajouté quelques modifications qui ne seront probablement pas fusionnées en amont.
Certains de mes projets dépendent du fork de la bibliothèque. Auparavant, il s'agissait d'une application et j'utilisais Pipenv pour gérer les dépendances des applications, où je pouvais facilement spécifier d'installer une branche/un commit spécifique à partir de Git dans Pipfile. Mon application a grandi et maintenant je la convertis en bibliothèque (elle ne sera pas publiée sur PyPi). Je dois résoudre le problème des sous-dépendances de Git pour la bibliothèque.
J'ai lu au moins les numéros suivants : #3610, #4187, #2124, #5384 et bien d'autres et bien sûr PEP. Quand j'ai fini de lire, j'étais encore plus confus qu'au début.

D'après ce que j'ai compris avec l'implémentation de PEP-508 dans le pip 10, je devrais pouvoir utiliser :

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',
    ],
)

Mais ça ne marche pas :

-> % 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

Mes questions:
1) Ai-je fait quelque chose de mal ou ce n'est pas pris en charge ?
2) S'il n'est pas pris en charge, le sera-t-il ?
3) Ai-je bien compris que je peux également utiliser une syntaxe similaire dans pyproject.toml si je souhaite migrer de setup.py vers quelque chose de plus déclaratif ?
4) La seule solution disponible aujourd'hui est-elle d'utiliser la section --process-dependency-links et dependency_links dans setup.py ?
5) Que se passe-t-il lorsque l'amont met à jour la bibliothèque sur PyPi vers la version 1.3.4 ou supérieure et que je souhaite toujours utiliser ma version fork 1.3.3 ?

Merci

UPD : solution de travail actuellement jusqu'à ce que #4187 soit implémentée si vous tombez sur ce fil :

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

Commentaire le plus utile

Ai-je fait quelque chose de mal ou ce n'est pas pris en charge?

Les exigences d'URL PEP 508 en tant que dépendances ne sont pas prises en charge.

S'il n'est pas pris en charge, le sera-t-il ?

Oui. Voir ci-dessous.

Est-ce que je comprends bien que je peux également utiliser une syntaxe similaire dans pyproject.toml si je veux migrer de setup.py vers quelque chose de plus déclaratif ?

pyproject.toml sert uniquement d'endroit pour spécifier les dépendances de temps de construction et pour avoir la configuration des outils. Tout autre chose que cela est implémenté par les outils que vous utilisez.

La seule solution disponible aujourd'hui est-elle d'utiliser les sections --process-dependency-links etdependence_links dans setup.py ?

Oui. C'est toute la motivation derrière #4187.


Nous avons désactivé la possibilité d'utiliser les exigences d'URL PEP 508 dans les dépendances, car nous ne voulons pas qu'un package installé à partir de PyPI entraîne le pip à atteindre une URL Web arbitraire. Fondamentalement, pip install spam ne devrait pas faire en sorte que pip atteigne autre chose que PyPI.

La solution actuelle proposée dans #4187 consiste simplement à modifier le conditionnel de blocage afin qu'il ne bloque que les dépendances d'URL lorsqu'un package est en fait installé directement à partir de PyPI, de sorte que tout autre mode d'installation puisse utiliser les dépendances d'URL PEP 508.

Tous les 3 commentaires

Ai-je fait quelque chose de mal ou ce n'est pas pris en charge?

Les exigences d'URL PEP 508 en tant que dépendances ne sont pas prises en charge.

S'il n'est pas pris en charge, le sera-t-il ?

Oui. Voir ci-dessous.

Est-ce que je comprends bien que je peux également utiliser une syntaxe similaire dans pyproject.toml si je veux migrer de setup.py vers quelque chose de plus déclaratif ?

pyproject.toml sert uniquement d'endroit pour spécifier les dépendances de temps de construction et pour avoir la configuration des outils. Tout autre chose que cela est implémenté par les outils que vous utilisez.

La seule solution disponible aujourd'hui est-elle d'utiliser les sections --process-dependency-links etdependence_links dans setup.py ?

Oui. C'est toute la motivation derrière #4187.


Nous avons désactivé la possibilité d'utiliser les exigences d'URL PEP 508 dans les dépendances, car nous ne voulons pas qu'un package installé à partir de PyPI entraîne le pip à atteindre une URL Web arbitraire. Fondamentalement, pip install spam ne devrait pas faire en sorte que pip atteigne autre chose que PyPI.

La solution actuelle proposée dans #4187 consiste simplement à modifier le conditionnel de blocage afin qu'il ne bloque que les dépendances d'URL lorsqu'un package est en fait installé directement à partir de PyPI, de sorte que tout autre mode d'installation puisse utiliser les dépendances d'URL PEP 508.

Merci pour l'explication détaillée, j'apprécie vraiment votre aide.

Ce fil a été automatiquement verrouillé car il n'y a eu aucune activité récente après sa fermeture. Veuillez ouvrir un nouveau problème pour les bogues liés.

Cette page vous a été utile?
0 / 5 - 0 notes