У меня есть репозиторий git со многими папками, одна из которых - модуль python, устанавливаемый с помощью pip, например:
repo.git/
repo.git/folder1/
repo.git/folder2/
repo.git/mymodule/
repo.git/mymodule/__init__.py
repo.git/mymodule/setup.py
repo.git/mymodule/...
Прямо сейчас для установки мне нужно сделать следующее:
git clone http://server/repo.git
cd repo
pip install mymodule
cd ..
rm -rf repo
Можно ли установить модуль напрямую с помощью pip без явного клонирования?
Я старался:
pip install git+https://server/repo.git/mymodule/
pip install git+https://server/repo.git:mymodule/
Но я получаю:
IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'
Ответы:
Существует запрос на перенос, касающийся этой функции, и, похоже, месяц назад он был объединен в ветку разработки. Синтаксис следующий :
pip install -e git+https://git.repo/some_repo.git#egg=version_subpkg&subdirectory=repo # install a python package from a repo subdirectory
Вероятно, нам придется немного подождать, пока он не будет объединен в master и распространен.
ОБНОВЛЕНИЕ : теперь это доступно и задокументировано на https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support следующим образом:
Примечание. В Windows вы должны заключить URL-адрес в двойные кавычки, иначе вы получите сообщение об ошибке: «Подкаталог не распознается как внутренняя или внешняя команда». Например, используйте:
источник
pip install -e 'git+https://…/repo.git@branch#egg=package&subdirectory=package'
приводит к появлению пакета для установки и помещениюpackage.egg-link
файла в пакеты сайтов, но он указывает на корневой каталогsrc/repo
, а не наsrc/repo/package
, как я ожидал. Это означает, чтоpy_modules
они не могут быть импортированы иentry_points
фактически не работают: они оба вызывают расширениеImportError: No module named package
.-e
кажется необходимым, иначеpip freeze
не показывает весь путь, только яйцо. Это произошлоpip-1.5.4
Об этом уже говорилось в одном из комментариев под правильным ответом, но просто чтобы выделить эту проблему: при выполнении этого из командной строки Linux вы должны избегать
&
-символа, поскольку амперсанд сообщает командной строке выполнить команду в фоновом режиме:Обратите внимание на обратную косую черту перед амперсандом. Поведение при экранировании может зависеть от дистрибутива Linux; Я не специалист.
Если вы проигнорируете это, вы можете столкнуться с загадочной ошибкой, подобной следующей:
источник
pip install git+ssh://git@github.com/org_or_username/repo.git@branch#subdirectory=path/to/dubdir