web-dev-qa-db-fra.com

Comment puis-je faire que setuptools installe un paquet qui n'est pas sur PyPI?

Je viens de commencer à travailler avec setuptools et virtualenv. Mon paquet nécessite le dernier python-gearman disponible uniquement à partir de GitHub. La version python-gearman qui est sur PyPI est ancienne. La source Github est compatible avec setuptools, c’est-à-dire setup.py, etc. Y at-il un moyen de faire en sorte que setuptools télécharge et installe la nouvelle version au lieu de la rechercher sur PyPI et d’installer l’ancienne?

Pour votre information, le nouveau python-gearman est http://github.com/mtai/python-gearman

136
andrei

La clé est de dire à easy_install où le package peut être téléchargé. Dans ce cas particulier, il peut être trouvé à l’URL http://github.com/mtai/python-gearman/tarball/master . Cependant, ce lien en lui-même ne fonctionnera pas, car easy_install ne peut pas dire simplement en regardant l'URL ce qu'il va obtenir.

En le changeant en http://github.com/mtai/python-gearman/tarball/master#Egg=gearman-2.0.0beta , easy_install sera en mesure d'identifier le nom du paquet et sa version. .

La dernière étape consiste à ajouter l’URL aux liens de dépendance de votre paquet, par exemple:

setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#Egg=gearman-2.0.0beta']
)

Désormais, lors de l’installation de VOTRE package, easy_install découvrira qu’il existe un "gearman 2.0.0beta" disponible au téléchargement à partir de cette URL et le sélectionnera avec bonheur sur celui de PyPI, si vous spécifiez "gearman> = 2.0.0beta". dans vos dépendances ..

(Normalement, ce genre de chose est fait: vous insérez un lien sur la page PyPI de votre lecteur vers la source téléchargeable; dans ce cas, si l'auteur du paquet gearman avait inclus un lien comme celui-ci, vous seriez déjà placé En général, les utilisateurs marquent la version de développement avec 'myproject-dev', puis utilisent une exigence de 'myproject> = somever, == dev', de sorte que s'il n'y a pas de paquet de plus ou moins, easy_install essaiera de consultez ou téléchargez le communiqué.)

Vous devrez spécifier --process-dependency-links lorsque vous utilisez pip. Notez que le traitement des liens de dépendance est obsolète et sera supprimé dans une version ultérieure.

153
PJ Eby

Vous pouvez utiliser le pip install protocol+location[@tag][#Egg=Dependency] format à installer directement depuis la source à l’aide de pip.

Git

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#Egg=ProjectName

Mercuriel

pip install hg+https://hg.myproject.org/MyProject/

SVN

pip install svn+svn://svn.myproject.org/svn/MyProject

Bzr

pip install bzr+http://bzr.myproject.org/MyProject/trunk

Les protocoles suivants sont supportés: [+git, +svn, +hg, +bzr]

Les versions

@tag vous permet de spécifier une version/balise spécifique à extraire.

#Egg=name vous permet de spécifier le projet en tant que dépendance des autres.

La commande doit toujours être @tag#Egg=name.

Dépôts privés

Vous pouvez également installer à partir de référentiels privés en modifiant le protocole en SSH (ssh://) et l’ajout d’un utilisateur approprié (git@):

git+ssh://[email protected]/username/my_private_repo

Vous pouvez également installer à partir de référentiels privés avec un nom d'utilisateur/mot de passe.

git+https://<username>:<password>@github.com/<user>/<repo>.git

Github offre la possibilité de créer personnels OAuth qui peuvent être cyclés

git+https://<oauth token>:[email protected]/<user>/<repo>.git

conditions.txt

requirements.txt est utilisé pour spécifier les dépendances du projet:

conditions.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

Ceux-ci ne sont pas installés automatiquement avec le paquet et doivent être installés avec la commande pip -r requirements.txt.

Y compris les fichiers d'exigences

Les fichiers d'exigences peuvent inclure d'autres fichiers d'exigences:

exigences-docs.txt

sphinx
-r requirements-dev.txt

exigences-dev.txt

some-dev-tool
-r requirements.txt

conditions.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

Les fichiers de conditions requises peuvent installer des dépendances spécifiées dans setup.py avec la commande suivante:

-e .

setup.py peut également installer à partir de référentiels en utilisant la même syntaxe que ci-dessus, mais en utilisant le fichier dependency_links valeur mentionnée dans cette réponse .

Les références:

https://pip.pypa.io/en/latest/user_guide.html#installing-packageshttps://pip.pypa.io/en/latest/reference/pip_install. html

63
Rebs

Comme je venais de faire la même chose, j’ai trouvé un autre moyen de le faire, comme pip--process-dependency-links sont programmés pour être supprimés dans pip 19.0 selon ce commentaire .

pip 18.1 inclut la fonctionnalité suivante

Autoriser l'utilisation des exigences d'URL PEP 508 en tant que dépendances.

De la description du PEP 508, la syntaxe de ces dépendances d'URL ressemble à ceci:

Une recherche minimale basée sur une URL:

pip @ https://github.com/pypa/pip/archive/1.3.1.Zip#sha1=da9234ee9982d4bbbbcc34346a6de940a148ea686

Donc dans votre setup.py on dirait

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.Zip'
   ...
   ]
)

Notez que le lien est un fichier d’archive et pourrait également être une version spécifique ou une branche d’un référentiel comme décrit dans cette réponse . Consultez également cette réponse pour travailler avec d'autres hôtes de référentiel.

À ma connaissance, le moyen le plus simple de mettre à jour la dépendance consiste à utiliser pip install -I . lors de l’installation de votre paquet à partir de son répertoire.

15
Phil

Vanilla setuptools ne prend pas en charge le téléchargement directement à partir d'un référentiel git, mais vous pouvez utiliser l'un des liens Source du téléchargement de cette page, comme:

easy_install http://github.com/mtai/python-gearman/tarball/master
6
Ned Deily