web-dev-qa-db-fra.com

Comment énoncer dans Requirements.txt une source directe de github

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 référentiel Github. Cela fonctionne bien et je veux avoir cette dépendance dans mon requirements.txt. J'ai regardé d'autres tickets comme this mais cela 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 donne 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))

Le documentation du fichier de spécifications ne mentionne pas les liens qui utilisent le spécificateur de protocole git+git;.

Quelqu'un a-t-il une solution à mon problème?

350
Alfe

La syntaxe des paquets "modifiable" peut être utilisée dans requirements.txt pour importer des paquets provenant de divers types VCS (git, hg, bzr, svn) :

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

En outre, il est possible de pointer vers un commit particulier:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#Egg=elasticutils
272
stalk

Normalement, votre fichier requirements.txt devrait ressembler à ceci:

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

Pour spécifier un dépôt Github, vous n'avez pas besoin de la convention package-name==.

Les exemples ci-dessous mettent à jour package-two à l'aide d'un dépôt GitHub. Le texte entre @ et # indique les spécificités du package.

Spécifiez le hachage de validation (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écifiez le nom de la branche (master):

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

Spécifiez la balise (0.1):

git+git://github.com/path/to/[email protected]#Egg=package-two

Spécifiez la version (3.7.1):

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

Notez que #Egg=package-two n'est pas un commentaire ici, mais indiquer explicitement le nom du paquet

Cet article de blog a un peu plus de discussion sur le sujet.

283
YPCrumble

requirements.txt permet aux manières suivantes de spécifier une dépendance à un paquet dans un référentiel git à partir du 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 [email protected]:SomeProject#Egg=SomeProject

Pour Github, cela signifie que vous pouvez faire (notez le -e omis] _):

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

Pourquoi cette réponse supplémentaire?
Le drapeau -e dans les autres réponses m'a quelque peu embrouillé. Voici donc ma clarification:

Le drapeau -e ou --editable signifie que le paquet 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

160
qff

Commencez par installer avec git+git ou git+https, comme vous le savez. 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 le bon résultat dans votre requirements.txt. Dans ce cas, vous aurez

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

Troisièmement, testez le résultat:

pip uninstall brabeion
pip install -r requirements.txt
73
osa

Depuis le pip v1.5, (publié le 1er janvier 2014: CHANGELOG , PR ), vous pouvez également spécifier un sous-répertoire d'un dépôt git 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

Remarque: en tant qu'auteur de module pip, dans l'idéal, vous souhaiterez probablement publier votre module dans son propre référentiel de niveau supérieur si vous le pouvez. Pourtant, cette fonctionnalité est utile pour certains dépôts existants contenant les modules python dans les sous-répertoires. Vous pourriez être obligé de les installer de cette manière si elles ne sont pas publiées sur pypi également.

15
TrinitronX