Налаштування так, щоб установка pip могла працювати з github


226

Ми хотіли б використовувати pip з github для встановлення приватних пакетів на наші виробничі сервери. Це питання стосується того, що потрібно мати у рефіні github, щоб установка була успішною.

Припускаючи наступний командний рядок (який автентифікується просто чудово та намагається встановити):

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

Що потрібно проживати в імені продукту? Це вміст того, що зазвичай буде у файлі tar після запуску setup.py з параметром sdist, чи це власне файл tar.gz чи щось інше?

Я прошу тут, тому що я спробував кілька варіантів і не можу змусити його працювати. Будь-яка допомога вдячна.

Відповіді:


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 / release / ProductVer. Це можливо і якщо так, як? Дуже дякую за допомогу!
ccgillett

4
Ні, це неможливо. pip встановлюється лише з каталогу кореневих сховищ, принаймні для git. Не знаю, як поводиться підрив ...
Уго Таварес

3
Якщо ви хочете зробити це через ssh та приватні репости, це повідомлення про те, як це зробити
Джонатан

Чому так ви не передали -eопцію (редагований режим) на піп?
Амеліо Васкес-Рейна

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

Таким чином, ви змусите працювати з протоколом із сховищами 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 пакету.


3
звідки походять ці назви яєць? не вдалося завантажити пакет у django після заміни пакета pip на github repo
holms

@holms Ім'я пошуку в setup.py
wieczorek1990,

Що #egg=django-celery? Це заповнювач?
чарувати

@enchance Це назва пакета.
wieczorek1990

13

Клоніруйте цільове сховище так само, як ви клонуєте будь-який інший проект:

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

Потім встановіть його в режимі розробки:

cd foo
pip install -e .

Ви можете змінити все, що не хочете, і кожен код за допомогою fooпакета використовуватиме модифікований код.

Є два переваги від цього рішення:

  1. Ви можете встановити пакет в домашній каталог проектів.
  2. Пакет включає в себе .gitdir, тож це звичайний сховище Git. Ви можете відразу ж натиснути на вилку.

2
Я можу засвідчити, що це рішення є магічним. У моєму випадку я хотів зламати pip, тому я клонував pipсховище, створив virtualenv, активував його та зробив pip install -e .. Тоді pipв virtualenv був у режимі розробки! Мені вражено, що це працює навіть із самим менеджером пакунків.
Радон Росборо

Це чудово! Я зауважую, що коли я встановив цей метод, а потім запустив pip list, відповідний пакет містить посилання на гілку Git та абсолютний шлях, з якого він був встановлений. Чи зберігає вони посилання на них або джерело можна видалити?
MadPhysicist

0

ви можете спробувати так у Colab

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.