Comment énoncer les exigences.txt directement github source

j'ai installé une bibliothèque en utilisant la commande

pip install git+git://github.com/mozilla/elasticutils.git

qui l'installe directement à partir d'un dépôt GitHub. Cela fonctionne bien et je veux avoir cette dépendance dans mon requirements.txt . J'ai regardé d'autres tickets comme ce mais ça n'a pas résolu mon problème. Si je mets quelque chose comme

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

dans le fichier requirements.txt , un pip install -r requirements.txt produit le résultat suivant:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

la documentation du fichier d'exigences ne mentionne pas les liens utilisant le spécificateur de protocole git+git , donc peut-être que ce n'est tout simplement pas pris en charge.

est-ce que quelqu'un a une solution pour mon problème?

263
demandé sur Community 2013-05-16 14:06:42

5 réponses

" modifiable "la syntaxe des paquets peut être utilisée dans requirements.txt pour importer des paquets d'une variété de VCS (git, hg, bzr, svn) :

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

aussi, il est possible de pointer au commit particulier:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils
218
répondu stalk 2015-01-06 22:15:13

normalement, votre fichier requirements.txt ressemblerait à quelque chose comme ceci:

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

pour spécifier un GitHub repo, vous n'avez pas besoin de la convention package-name== .

les exemples ci-dessous mettent à jour package-two en utilisant un GitHub repo. Le texte entre @ et # indique les caractéristiques du paquet.

spécifier le hachage de propagation ( 41b95ec dans le contexte de la mise à jour requirements.txt ):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

spécifier le nom de la succursale ( master ):

git+git://github.com/path/to/package-two@master#egg=package-two

spécifier l'étiquette ( 0.1 ):

git+git://github.com/path/to/package-two@0.1#egg=package-two

spécifier la mainlevée ( 3.7.1 ):

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

noter que #egg=package-two n'est pas un commentaire ici, c'est à indiquer explicitement le nom du paquet

ce billet de blog a encore plus de discussions sur le sujet.

161
répondu YPCrumble 2018-08-15 18:14:41

requirements.txt permet les façons suivantes de spécifier une dépendance sur un paquet dans un dépôt git à partir de pip 7.0: 1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

pour Github ce qui signifie que vous pouvez faire (notez l'omis -e ):

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

Pourquoi les extra réponse?

J'ai été quelque peu confus par le drapeau -e dans les autres réponses donc voici ma clarification:

le drapeau -e ou --editable signifie que le colis est installé dans <venv path>/src/SomeProject et donc pas dans le <venv path>/lib/pythonX.X/site-packages/SomeProject profondément enfoui dans lequel il serait autrement placé. 2

Documentation

137
répondu qff 2015-12-29 20:01:56

d'abord, installer avec git+git . Exemple d'installation de la branche kronok du projet brabeion :

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

Deuxièmement, utilisez pip freeze > requirements.txt pour obtenir la bonne chose dans votre requirements.txt . Dans ce cas, vous obtiendrez

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

troisième, tester le résultat:

pip uninstall brabeion
pip install -r requirements.txt
70
répondu osa 2013-12-09 00:07:54

depuis pip v1.5 , (sorti le 1er janvier 2014: CHANGELOG , PR ) vous pouvez également spécifier un sous-répertoire d'un git repo pour contenir votre module. La syntaxe ressemble à ceci:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

Note: en tant qu'auteur de module pip, idéalement, vous souhaiteriez probablement publier votre module dans son propre repo de haut niveau si vous le pouvez. Pourtant, cette fonctionnalité est utile pour certains répertoires pré-existants qui contiennent des modules python dans des sous-répertoires. Vous pourriez être forcé de les installer de cette façon si elles ne sont pas publiées à pypi aussi.

14
répondu TrinitronX 2014-10-03 07:09:14