5

Можно ли использовать pip для установки пакета из приватного репозитория GitHub?

12

Я пытаюсь установить пакет Python из приватного репозитория на GitHub. Для публичного репозитория я могу использовать следующую команду, и она работает отлично:

pip install git+git://github.com/django/django.git

Однако, когда я пытаюсь сделать то же самое для приватного репозитория:

pip install git+git://github.com/echweb/echweb-utils.git

Я получаю следующий вывод:

Downloading/unpacking git+git://github.com/echweb/echweb-utils.git
Cloning Git repository git://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build
Complete output from command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build:
fatal: The remote end hung up unexpectedly

Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build...

----------------------------------------
Command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build failed with error code 128

Я предполагаю, что это происходит потому, что я пытаюсь получить доступ к приватному репозиторию без предоставления аутентификации. Поэтому я решил использовать Git + ssh, надеясь, что pip воспользуется моим публичным SSH ключом для аутентификации:

pip install git+ssh://github.com/echweb/echweb-utils.git

Однако я получаю следующий вывод:

Downloading/unpacking git+ssh://github.com/echweb/echweb-utils.git
Cloning Git repository ssh://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build
Complete output from command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build:
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build...

Permission denied (publickey).

fatal: The remote end hung up unexpectedly

----------------------------------------
Command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build failed with error code 128

Возможно ли то, что я пытаюсь сделать? Если да, как мне это осуществить?

5 ответ(ов)

1

Если у вас есть локально клонированный приватный репозиторий, вы можете воспользоваться следующим методом:

pip install git+file://c:/repo/directory

Более современный подход заключается в использовании слишком простого способа — просто выполните следующую команду (использование ключа -e позволит вам не коммитить изменения перед их применением):

pip install -e C:\repo\directory

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

0

Если вы хотите установить зависимости из файла требований на CI-сервере, вы можете сделать это следующим образом:

git config --global credential.helper 'cache'
echo "protocol=https
host=example.com
username=${GIT_USER}
password=${GIT_PASS}
" | git credential approve
pip install -r requirements.txt

В моем случае я использовал GIT_USER=gitlab-ci-token и GIT_PASS=${CI_JOB_TOKEN}.

Этот метод имеет явное преимущество: у вас есть единый файл требований, который содержит все ваши зависимости.

0

Если вам нужно сделать это в виде однострочника в командной строке, это также возможно. Я смог сделать это для развертывания на Google Colab:

  1. Создайте токен доступа (Personal Access Token): https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token
  2. Выполните команду: pip install git+https://<USERNAME>:<PERSONAL_ACCESS_TOKEN>@github.com/<ACCOUNT>/<REPOSITORY>.git
0

Синтаксис для файла требований можно найти здесь:

https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format

Например, используйте:

-e git+http://github.com/rwillmer/django-behave#egg=django-behave

если вы хотите, чтобы исходный код оставался после установки.

Или просто

git+http://github.com/rwillmer/django-behave#egg=django-behave

если вы хотите, чтобы он был просто установлен.

0

Когда я устанавливал пакет с GitHub, я использовал следующую команду:

pip install git+ssh://[email protected]/<username>/<projectname>.git#egg=<eggname>

Однако, поскольку мне пришлось запускать pip с sudo, SSH-ключи перестали работать с GitHub, и команда git clone завершилась с ошибкой "Permission denied (publickey)". Использование git+https позволило мне выполнить команду с sudo, и GitHub запросил у меня имя пользователя и пароль.

Вот как выглядит команда с https:

sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>

Таким образом, если у вас возникают проблемы с SSH-ключами при использовании sudo, попробуйте использовать HTTPS вместо SSH.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь