J'ai un référentiel 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 le moment, je dois faire ce qui suit pour installer:
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 j'obtiens:
IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'
Réponses:
Il y a une pull request concernant cette fonctionnalité, et elle semble avoir été fusionnée pour développer une branche il y a un mois. La syntaxe est la suivante :
pip install -e git+https://git.repo/some_repo.git#egg=version_subpkg&subdirectory=repo # install a python package from a repo subdirectory
Nous devons probablement attendre un certain temps jusqu'à ce qu'il soit fusionné avec master et distribué.
MISE À JOUR : Ceci est maintenant disponible et documenté à https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support comme suit:
Remarque: sous Windows, vous devez placer l'URL entre guillemets, ou vous obtiendrez une erreur "'' sous-répertoire 'n'est pas reconnu comme une commande interne ou externe". Par exemple, utilisez:
la source
pip install -e 'git+https://…/repo.git@branch#egg=package&subdirectory=package'
résultats dans le paquet apparaissant à installer, et unpackage.egg-link
fichier se mettre dans le site-packages - mais il pointe vers le répertoire racinesrc/repo
, pas àsrc/repo/package
, comme je l' attendre. Cela signifie quepy_modules
cela ne peut pas être importé etentry_points
ne fonctionne pas réellement: ils génèrent tous deux unImportError: No module named package
.-e
semble nécessaire, sinonpip freeze
ne montre pas tout le chemin, seulement l'œuf. Cela s'est passé lepip-1.5.4
Cela a déjà été indiqué dans l' un des commentaires sous la bonne réponse, mais juste pour mettre en évidence ce problème: lors de l'exécution de ceci à partir de la ligne de commande Linux, vous devez échapper au caractère
&
-character puisque l'esperluette indique à la ligne de commande d'exécuter une commande en arrière-plan:Notez la barre oblique inverse 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 cryptique comme celle-ci:
la source
pip install git+ssh://[email protected]/org_or_username/repo.git@branch#subdirectory=path/to/dubdir