Как заявить в требованиях.txt прямой источник github
Я установил библиотеку с помощью команды
pip install git+git://github.com/mozilla/elasticutils.git
который устанавливает его непосредственно из репозитория Github. Это отлично работает, и я хочу иметь эту зависимость в моем requirements.txt
. Я смотрел на другие билеты, как этой но это не решает мою проблему. Если я положу что-то вроде
-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev
на requirements.txt
файл, a pip install -r requirements.txt
результаты в следующем выходе:
Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))
на документация по требованиям файл не упоминает ссылки с помощью git+git
спецификатор протокола, поэтому, возможно, это просто не поддерживается.
есть ли у кого-нибудь решение моей проблемы?
5 ответов
"редактировать" пакеты синтаксис можно использовать в requirements.txt
для импорта пакетов из различных VCS (git, hg, bzr, svn):
-e git://github.com/mozilla/elasticutils.git#egg=elasticutils
кроме того, можно указать на конкретный коммит:
-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils
обычно requirements.txt
файл будет выглядеть примерно так:
package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...
чтобы указать репозиторий Github, вам не нужно package-name==
конвенции.
примеры ниже update package-two
использование репозитория GitHub. Текст между @
и #
обозначает специфику пакета.
укажите хэш фиксации (41b95ec
в контексте модернизации requirements.txt
):
package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1
укажите название филиала (master
):
git+git://github.com/path/to/package-two@master#egg=package-two
указать тег (0.1
):
git+git://github.com/path/to/package-two@0.1#egg=package-two
укажите release (3.7.1
):
git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two
отметим, что #egg=package-two
это не комментарий, это явно Укажите имя пакета
этот блог есть еще несколько обсуждений по этой теме.
requirements.txt
позволяет использовать следующие способы указания зависимости от пакета в репозитории git начиная с pip 7.0:1
[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject
для Github это означает, что вы можете сделать (обратите внимание на опущенный -e
):
git+git://github.com/mozilla/elasticutils.git#egg=elasticutils
почему дополнительный ответ?
Я был несколько смущен -e
флаг в других ответах, так что вот мое разъяснение:
на -e
или --editable
флаг означает, что пакет установлен в <venv path>/src/SomeProject
и таким образом не в глубоко погребенном <venv path>/lib/pythonX.X/site-packages/SomeProject
в противном случае он будет помещен.2
документация
во-первых, установить с git+git
. Пример установки на :
pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion
во-вторых, используйте pip freeze > requirements.txt
чтобы получить правильную вещь в вашем requirements.txt
. В этом случае, вы получите
-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master
в-третьих, проверить результат:
pip uninstall brabeion
pip install -r requirements.txt
С pip v1.5
, (выпущено 1 января 2014:изменений, PR) вы также можете указать подкаталог репозитория git, который будет содержать ваш модуль. Синтаксис выглядит следующим образом:
pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory
Примечание: как автор модуля pip, в идеале вы, вероятно, захотите опубликовать свой модуль в своем РЕПО верхнего уровня, если сможете. Тем не менее эта функция полезна для некоторых ранее существовавших репозиториев, содержащих модули python в подкаталогах. Вы можете быть вынуждены установить их таким образом если они не опубликованы в pypi тоже.