J'ai des liens de dépendance dans mon setup.py:
...
dependency_links = ['http://github.com/robot-republic/python-s3/tarball/master.tar.gz#Egg=python-s3'],
...
Mais ça ne marche pas. Cependant, install_requires fonctionne bien. Peut-être qu'il existe une autre méthode pour configurer git repo comme requis pour setup.py?
Cette réponse devrait aider. En un mot, vous devez spécifier la version (ou "dev") du #Egg=python-s3
donc ça ressemble à #Egg=python-s3-1.0.0
.
Mises à jour basées sur le commentaire de @ Cerin:
--process-dependency-links
. Je ne l'ai pas testé car je suis d'accord avec le point ci-dessous.Je me rends compte que c'est une vieille question, mais, au cas où vous vous trouveriez ici comme moi, c'est ce qui a fonctionné pour moi.
J'ai un package sur GitHub (non enregistré avec pypi) qui s'appuie sur d'autres packages GitHub (non-pypi). J'ai passé énormément de temps à essayer de comprendre comment obtenir pip pour gérer cela correctement. Je vais inclure ce que j'ai fait pour le réparer ici.
Placer les dépendances dans un fichier requirements.txt est la méthode préférée pour répertorier les dépendances. Cependant, vous devez également remplir install_requires dans la configuration. C'est à ce stade que j'ai rencontré un barrage routier avec pip ne voulant pas installer les dépendances de GitHub.
La plupart des endroits, y compris les réponses à cette question, vous indiquent de remplir la section dependency_links de l'installation. Cependant, vous devez également remplir le champ install_requires avec le nom du package référencé dans dependency_links.
Par exemple, si votre requirements.txt contient les éléments suivants.
somepackage==1.2.0
https://github.com/user/repo/tarball/master#Egg=repo-1.0.0
anotherpackage==4.2.1
Ensuite, votre appel d'installation devrait ressembler à ceci:
setup(
name='yourpackage',
version='1.7.5',
packages=[],
url='',
license='',
author='',
author_email='',
description='',
install_requires=[
'somepackage==1.2.0',
'repo==1.0.0',
'anotherpackage==4.2.1'
],
dependency_links=[
'https://github.com/user/repo/tarball/master#Egg=repo-1.0.0'
]
)
Ok, maintenant nous avons configuré notre package; son installation est la tâche suivante. C'est là que j'ai passé beaucoup de temps. Je ne pouvais pas comprendre pourquoi la spécification de dependency_links n'a apparemment rien fait. L'astuce est que dans certains cas, vous devez définir l'indicateur allow-all-external (peut être plus spécifique) pour pip. Par exemple:
pip install git+https://github.com/user/anotherrepo.git
--process-dependency-links --allow-all-external
Vous avez terminé et cela fonctionne!
AVERTISSEMENT: dependency_links et les indicateurs process-dependency-links et allow-all-external sont obsolètes, ils seront donc supprimés bientôt. Pendant le temps que j'ai passé, je n'ai pas pu trouver une meilleure méthode préférée et avoir toujours la fonction pip correctement.
depuis la version pip 18.1 RL PEP 508 est pris en charge. Cela signifie que vous n'avez plus besoin des liens de dépendance obsolètes. Vous écrivez plutôt la dépendance directement dans la liste install_requires. L'exemple de @Chad ressemble à ceci:
setup(
name='yourpackage',
version='1.7.5',
packages=[],
url='',
license='',
author='',
author_email='',
description='',
install_requires=[
'somepackage==1.2.0',
'repo==1.0.0 @ https://github.com/user/archive/master.Zip#Egg=repo-1.0.0',
'anotherpackage==4.2.1'
],
)
Pour installer votre package, vous pouvez simplement écrire:
pip install yourpackage
(sans --process-dependency-links)
Quelques notes sur certains problèmes que j'ai trouvés, en particulier pour l'installation à partir de dépôts privés.
L'installation à partir de pip & setuptools présente quelques différences subtiles; mais cette façon devrait fonctionner pour les deux.
from setuptools import setup
import os
# get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/
github_token = os.environ['GITHUB_TOKEN']
setup(
# ...
install_requires='package',
dependency_links = [
'git+https://{github_token}@github.com/user/{package}.git/@{version}#Egg={package}-0'
.format(github_token=github_token, package=package, version=master)
]
Quelques notes ici:
0
) à la fin du lien, même s'il n'y a pas de package sur PyPI. Ce doit être un nombre réel, pas un mot.git+
pour dire à setuptools de cloner le dépôt, plutôt que de pointer un Zip/tarballversion
peut être une branche, une balise ou un hachage de validation--process-dependency-links
en cas d'installation à partir de pipMettez d'abord à niveau votre version pip car il s'agit d'une nouvelle syntaxe.
pip install pip --upgrade
Procédez ensuite comme suit:
install_requires=[
'bleualign-git @ https://github.com/rsennrich/Bleualign/archive/<commit-hash or branch-name>.Zip#Egg=bleualign-git-1.0.0'
]
J'espère que cela t'aides.
Commentaires:
Bonne réponse (vote positif). Je tiens également à mentionner que le résultat réel dépendra probablement de la plate-forme et/ou de la version pip. J'ai vu quand cela fonctionne , ou semble fonctionner mais n'a pas vraiment tiré la dépendance du lien spécifié , ou simplement rejeté . Je n'utiliserais donc probablement cela que comme solution de contournement de courte durée. Restez fidèle à la manière traditionnelle autant que possible.