Конфигурирование так, чтобы установка pip могла работать с github

226

Мы хотели бы использовать pip с github для установки частных пакетов на наши производственные серверы. Этот вопрос касается того, что должно быть в репозитории github для успешной установки.

Предполагая следующую командную строку (которая просто аутентифицируется и пытается установить):

pip install git+ssh://git@github.com/BlahCo/search/tree/prod_release_branch/ProductName

Что должно находиться в ProductName? Это содержимое того, что обычно будет в файле tar после запуска setup.py с опцией sdist, или это файл tar.gz, или что-то еще?

Я спрашиваю здесь, потому что я попробовал несколько вариантов и не могу заставить его работать. Любая помощь приветствуется.

ccgillett
источник

Ответы:

290

Вам нужен весь пакет Python с setup.pyфайлом в нем.

Пакет с именем fooбудет:

foo # the installable package
├── foo
   ├── __init__.py
   └── bar.py
└── setup.py

И установить из github, как:

$ pip install git+https://github.com/myuser/foo.git@v123
or
$ pip install git+https://github.com/myuser/foo.git@newbranch

Более подробная информация на https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

Уго Таварес
источник
3
Вышесказанное работает, большое спасибо. Но что, если у меня есть выпуски в подкаталоге в репозитории, поэтому вместо foo.git я ищу foo / Releases / ProductVer. Это возможно и если да, то как? Большое спасибо за помощь!
ccgillett
4
Нет, это невозможно. pip устанавливается только из корневого каталога репозитория, по крайней мере, для git. Не знаю, как ведет себя подрывная деятельность ...
Уго Таварес
3
Если вы хотите сделать это через ssh и частные репозитории, это пост о том, как это сделать
Джонатан
Почему вы не передали -eопцию (редактируемый режим) в pip?
Амелио Васкес-Рейна
14
Вот новая схема URL: pip install git+https://github.com/pypa/pip.git Источник: pip Github repo
aboutaaron
111

У меня была похожая проблема, когда мне нужно было установить github repo, но я не хотел устанавливать git и т. Д.

Самый простой способ сделать это - использовать zip-архив пакета. Добавьте /zipball/masterк URL репо:

    $ pip install https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Downloading/unpacking https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
  Downloading master
  Running setup.py egg_info for package from https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Installing collected packages: django-debug-toolbar-mongo
  Running setup.py install for django-debug-toolbar-mongo
Successfully installed django-debug-toolbar-mongo
Cleaning up...

Таким образом, вы заставите pip работать с репозиториями исходного кода github.

Дмитрий
источник
2
Это единственный ответ, который также работает под Windows
divenex
Как это можно сделать с частными репозиториями? (как вопрос задает)
Родриго Е. Принсипи
29

Если вы хотите использовать requirements.txtфайл, вам понадобится gitчто-то вроде записи ниже, чтобы анонимно получить основную ветку в вашем requirements.txt.

Для обычной установки:

git+git://github.com/celery/django-celery.git

Для « редактируемой » установки:

-e git://github.com/celery/django-celery.git#egg=django-celery

Редактируемый режим загружает исходный код проекта ./srcв текущий каталог. Это позволяет pip freezeвывести правильное местоположение github пакета.

wieczorek1990
источник
3
откуда взялись эти яйца? он не может загрузить пакет в django после замены пакета pip на github repo
holms
@holms Поиск имени в setup.py
wieczorek1990
Что #egg=django-celery? Это заполнитель?
enchance
@enchance Это название пакета.
wieczorek1990
13

Клонируйте целевой репозиторий так же, как вы клонируете любой другой проект:

git clone git@github.com:myuser/foo.git

Затем установите его в режиме разработки:

cd foo
pip install -e .

Вы можете изменить что угодно, и каждый код, использующий fooпакет, будет использовать измененный код.

Есть два преимущества этого решения:

  1. Вы можете установить пакет в вашем домашнем каталоге проектов.
  2. Пакет включает в себя .gitкаталог, так что это обычный Git-репозиторий. Вы можете нажать на вилку прямо сейчас.
avalanchy
источник
2
Я могу засвидетельствовать, что это решение волшебно. В моем случае я хотел взломать pip, поэтому я клонировал pipрепозиторий, создал virtualenv, активировал его и сделал pip install -e .. Тогда pipв virtualenv был в режиме разработки! Я впечатлен, что это работает даже с самим менеджером пакетов.
Радон Росборо
Это круто! Я заметил, что когда я установил с использованием этого метода и затем запустил pip list, рассматриваемый пакет имел ссылки на ветку Git и абсолютный путь, из которого он был установлен. Сохраняет ли он какие-либо ссылки на них или источник может быть удален?
MadPhysicist
0

Вы можете попробовать этот способ в Колабе

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
Shaina Raza
источник