Как я могу установить из подкаталога 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'
Ответы
Ответ 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