Configuration pour que l'installation de pip puisse fonctionner à partir de github


226

Nous aimerions utiliser pip avec github pour installer des packages privés sur nos serveurs de production. Cette question concerne ce qui doit être dans le dépôt github pour que l'installation soit réussie.

En supposant que la ligne de commande suivante (qui s'authentifie très bien et tente d'installer):

pip install git+ssh://git@github.com/BlahCo/search/tree/prod_release_branch/ProductName

Que doit résider dans ProductName? S'agit-il du contenu de ce qui se trouverait normalement dans le fichier tar après avoir exécuté setup.py avec l'option sdist, ou est-ce le fichier tar.gz réel, ou autre chose?

Je demande ici parce que j'ai essayé plusieurs variantes et que je ne peux pas le faire fonctionner. Toute aide appréciée.

Réponses:


290

Vous avez besoin de l'ensemble du paquet python, avec un setup.pyfichier dedans.

Un package nommé fooserait:

foo # the installable package
├── foo
   ├── __init__.py
   └── bar.py
└── setup.py

Et installez à partir de github comme:

$ pip install git+https://github.com/myuser/foo.git@v123
or
$ pip install git+https://github.com/myuser/foo.git@newbranch

Plus d'informations sur https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support


3
Les travaux ci-dessus, merci beaucoup. Mais que se passe-t-il si j'ai des versions dans un sous-répertoire d'un repo, donc plutôt que foo.git, je recherche foo / releases / ProductVer. Est-ce possible et si oui, comment? Merci beaucoup pour l'aide!
ccgillett

4
Non ce n'est pas possible. pip installe uniquement à partir du répertoire du référentiel racine, au moins pour git. Je ne sais pas comment se comporte la subversion ...
Hugo Tavares

3
Si vous voulez le faire sur ssh et repos privés, voici un article sur la façon de le faire
Jonathan

Pourquoi est-ce que vous n'avez pas passé l' -eoption (mode éditable) à pip?
Amelio Vazquez-Reina

14
Voici le nouveau schéma d'URL: pip install git+https://github.com/pypa/pip.git Source: pip Github repo
aboutaaron

111

J'ai eu un problème similaire lorsque j'ai dû installer à partir du dépôt github, mais je ne voulais pas installer git, etc.

La manière simple de le faire est d'utiliser l'archive zip du package. Ajoutez /zipball/masterà l'URL du dépôt:

    $ pip install https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Downloading/unpacking https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
  Downloading master
  Running setup.py egg_info for package from https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Installing collected packages: django-debug-toolbar-mongo
  Running setup.py install for django-debug-toolbar-mongo
Successfully installed django-debug-toolbar-mongo
Cleaning up...

De cette façon, vous ferez fonctionner pip avec les référentiels source github.


2
C'est la seule réponse qui fonctionne également sous Windows
divenex

Comment cela peut-il être fait avec des référentiels privés? (comme la question le demande)
Rodrigo E. Principe

29

Si vous souhaitez utiliser un requirements.txtfichier, vous aurez besoin de gitquelque chose comme l'entrée ci-dessous pour récupérer anonymement la branche principale de votre requirements.txt.

Pour une installation régulière:

git+git://github.com/celery/django-celery.git

Pour une installation " modifiable ":

-e git://github.com/celery/django-celery.git#egg=django-celery

Le mode éditable télécharge le code source du projet ./srcdans le répertoire courant. Il permet pip freezede sortir l'emplacement github correct du paquet.


3
d'où vient le nom de cet œuf? il ne parvient pas à charger le package dans django après avoir remplacé le package pip par le
dépôt

@holms Lookup name dans setup.py
wieczorek1990

Quoi #egg=django-celery? Est-ce un espace réservé?
enchance le

@enchance C'est le nom du package.
wieczorek1990

13

Clonez le référentiel cible de la même manière que vous clonez n'importe quel autre projet:

git clone git@github.com:myuser/foo.git

Installez-le ensuite en mode développement:

cd foo
pip install -e .

Vous pouvez changer tout ce que vous ne voulez pas et chaque code utilisant le foopackage utilisera du code modifié.

Il y a 2 avantages à cette solution:

  1. Vous pouvez installer le package dans votre répertoire de projets personnels.
  2. Le paquet inclut .gitdir, c'est donc un dépôt Git normal. Vous pouvez pousser à votre fourchette tout de suite.

2
Je peux témoigner que cette solution est magique. Dans mon cas, je voulais pirater pip, alors j'ai cloné le pipréférentiel, créé un virtualenv, l'ai activé et l'ai fait pip install -e .. Puis le pipdans le virtualenv était en mode développement! Je suis impressionné que cela fonctionne même avec le gestionnaire de paquets lui-même.
Radon Rosborough

C'est bien! Je remarque que lorsque j'ai installé en utilisant cette méthode, puis exécuté pip list, le package en question a des références à la branche Git et au chemin absolu à partir duquel il a été installé. Conserve-t-il des références à celles-ci ou la source peut-elle être supprimée?
MadPhysicist

0

vous pouvez essayer de cette façon dans Colab

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.