Подтвердить что ты не робот

Как я могу установить из подкаталога git с помощью pip?

У меня есть репозиторий 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 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'
4b9b3361

Ответ 1

Существует запрос на получение этой функции, и, похоже, она была объединена, чтобы развить отрасль месяц назад. Синтаксис следующий:

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

Нам, вероятно, придется подождать какое-то время, пока оно не будет объединено с хозяином и не будет распространено.

UPDATE: теперь это доступно и задокументировано на странице https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support следующим образом:

Для проектов, в которых setup.py не находится в корне проекта, используется компонент "подкаталог". Значение компонента "подкаталог" должно быть пустым, начиная с корня проекта, где находится setup.py.

Поэтому, если ваш макет репозитория:

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

Вам нужно будет использовать

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

Примечание. В Windows вы должны поместить URL в двойные кавычки, или вы получите сообщение об ошибке. "Подкаталог" не распознается как внутренняя или внешняя команда ". Например, используйте:

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

Ответ 2

Это уже было указано в одном из комментариев под правильным ответом, но просто для того, чтобы выделить эту проблему: при выполнении этого из командной строки Linux вы должны избежать & -character, поскольку амперсанд сообщает командной строке, чтобы запустить команду в фоновом режиме:

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

Обратите внимание на обратную косую черту перед амперсандом. Поведение ускорения может зависеть от дистрибутива Linux; Я не эксперт.
Если вы проигнорируете это, вы можете столкнуться с загадочной ошибкой, например:

bash: (...) command not found