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?
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
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.
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
master
):git+git://github.com/path/to/package-two@master#Egg=package-two
0.1
):git+git://github.com/path/to/[email protected]#Egg=package-two
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.
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
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
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.