Как изложить в требованиях.тхт прямой источник на 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))

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

есть ли у кого-нибудь решение моей проблемы?

5 263

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== конвенции.

приведенные ниже примеры обновления 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

указать релиз (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 флаг в других ответах так вот мое разъяснение:

The -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

Так как Пип 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 тоже.