106 votes

Python setuptools : Comment puis-je lister un dépôt privé sous install_requires ?

Je crée un setup.py pour un projet qui dépend de dépôts GitHub privés. Les parties pertinentes du fichier ressemblent à ceci :

from setuptools import setup
setup(name='my_project',
    ...,
    install_requires=[
        'public_package',
        'other_public_package',
        'private_repo_1',
        'private_repo_2',
    ],
    dependency_links=[
        'https://github.com/my_account/private_repo_1/master/tarball/',
        'https://github.com/my_account/private_repo_2/master/tarball/',
    ],
    ...,
)

J'utilise setuptools au lieu de distutils car ce dernier ne supporte pas le install_requires y dependency_links arguments par este réponse.

Le fichier de configuration ci-dessus ne permet pas d'accéder aux dépôts privés avec une erreur 404 - ce qui est normal puisque GitHub renvoie une erreur 404 aux demandes non autorisées pour un dépôt privé. Cependant, je n'arrive pas à trouver comment faire en sorte que setuptools authentifier.

Voici quelques-unes des choses que j'ai essayées :

  1. Utilice git+ssh:// au lieu de https:// en dependency_links comme je le ferais si j'installais le dépôt avec pip . Cela échoue parce que setuptools ne reconnaît pas ce protocole ("unknown url type : git+ssh"), bien que l'option distribuer de la documentation dit qu'il devrait. Idem git+https y git+http .

  2. https://<username>:<password>@github.com/... - On obtient toujours un 404. (Cette méthode ne fonctionne pas avec curl o wget à partir de la ligne de commande - bien que curl -u <username> <repo_url> -O <output_file_name> fonctionne).

  3. Mise à niveau de setuptools (0.9.7) et virtualenv (1.10) vers les dernières versions. J'ai également essayé d'installer distribute mais cet aperçu dit qu'il a été fusionné dans setuptools. Dans tous les cas, aucun résultat.

Actuellement, je n'ai que setup.py affiche un avertissement indiquant que les dépôts privés doivent être téléchargés séparément. C'est évidemment loin d'être idéal. J'ai l'impression qu'il y a quelque chose d'évident qui m'échappe, mais je n'arrive pas à trouver ce que c'est :)

Question dupliquée sans réponse aquí .

1voto

Overclocked Points 355

L'utilisation de l'URL d'archive de github fonctionne pour moi, pour les dépôts publics. Par exemple

dependency_links = [
  'https://github.com/username/reponame/archive/master.zip#egg=eggname-version',
]

1voto

user15725949 Points 1

Avec pip 20.1.1, ceci fonctionne pour moi

install_requires=[ "packson3@https://tracinsy.ewi.tudelft.nl/pubtrac/Utilities/export/138/packson3/dist/packson3-1.0.0.tar.gz"],

dans setup.py

-1voto

wor Points 133

Edit : Il semble que cela ne fonctionne qu'avec les dépôts github publics, voir les commentaires.

dependency_links=[
    'https://github.com/my_account/private_repo_1/tarball/master#egg=private_repo_1',
    'https://github.com/my_account/private_repo_2/tarball/master#egg=private_repo_2',
],

La syntaxe ci-dessus semble fonctionner pour moi avec setuptools 1.0. Pour le moment, au moins la syntaxe d'ajout de "#egg=nom_du_projet-version" aux dépendances VCS est documentée dans le lien que vous avez donné à distribuer de la documentation .

-2voto

kotrfa Points 475

Cela fonctionne pour notre scénario :

  1. le paquet est sur github dans un repo privé
  2. nous voulons l'installer dans site-packages (pas dans ./src avec -e)
  3. être capable d'utiliser pip install -r requirements.txt
  4. pouvoir utiliser pip install -e reposdir (ou depuis github), où les dépendances sont uniquement spécifiées dans requirements.txt

https://github.com/pypa/pip/issues/3610#issuecomment-356687173

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X