158 votes

Comment puis-je installer à partir d'un sous-répertoire git avec pip ?

J'ai un dépôt git avec de nombreux dossiers, l'un d'eux étant un module python installable avec pip, comme ceci :

repo.git/
repo.git/folder1/
repo.git/folder2/
repo.git/mymodule/
repo.git/mymodule/__init__.py
repo.git/mymodule/setup.py
repo.git/mymodule/...

Pour l'instant, je dois faire ce qui suit pour l'installation :

git clone http://server/repo.git
cd repo
pip install mymodule
cd ..
rm -rf repo

Est-il possible d'installer le module directement avec pip sans clonage explicite ?

J'ai essayé :

pip install git+https://server/repo.git/mymodule/
pip install git+https://server/repo.git:mymodule/

Mais je comprends :

IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'

205voto

Denis Golomazov Points 1211

Il existe un demande de retrait concernant cette fonctionnalité, et il semble qu'elle ait été fusionnée avec la branche de développement il y a un mois. La syntaxe est la suivante suivant :

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

Nous devrons probablement attendre un certain temps jusqu'à ce qu'il soit fusionné à master et distribué.

UPDATE : Ceci est maintenant disponible et documenté à https://pip.pypa.io/en/stable/cli/pip_install/#vcs-support comme suit :

Pour les projets où setup.py n'est pas dans la racine du projet, le composant "subdirectory" est utilisé. La valeur du composant "subdirectory" (sous-répertoire) doit être un chemin partant de la racine du projet vers l'endroit où setup.py se trouve.

Donc si la disposition de votre dépôt est :

- pkg_dir/
  - setup.py  # setup.py for package ``pkg``
  - some_module.py
- other_dir/
  - some_file
- some_other_file

Vous devrez utiliser

pip install -e vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir

Remarque : Sous Windows, vous devez placer l'URL entre guillemets, sinon vous obtiendrez l'erreur "'subdirectory' n'est pas reconnu comme une commande interne ou externe". Par exemple, utilisez :

pip install -e "vcs+protocol://repo_url#egg=pkg&subdirectory=pkg_dir"

50voto

rinderwahn Points 853

Cela a déjà été dit dans un des commentaires sous la bonne réponse, mais juste pour souligner ce problème : lorsque vous exécutez cette opération à partir de la ligne de commande Linux, vous debe échapper à la & Le caractère - puisque l'esperluette indique à la ligne de commande d'exécuter une commande en arrière-plan :

git+https://git.repo/some_repo.git#egg=version_subpkg\&subdirectory=repo

Remarquez la barre oblique inversée avant l'esperluette. Le comportement d'échappement peut dépendre de la distribution Linux ; je ne suis pas un expert.
Si vous ignorez cela, vous risquez de rencontrer une erreur énigmatique comme la suivante :

bash: (...) command not found

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X