web-dev-qa-db-ja.com

pipを使ってプライベートGitHubリポジトリからパッケージをインストールすることは可能ですか?

タイトルが示すように、私はプライベートGitHubリポジトリからPythonパッケージをインストールしようとしています。公開リポジトリのために私はうまくいく以下のコマンドを発行することができます:

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

私が達成しようとしていることは可能でさえありますか?もしそうなら、どうすればそれができますか?

292
Adam J. Forster

git+ssh URIスキームを使用できますが、usernameを設定する必要があります。

pip install git+ssh://[email protected]/echweb/echweb-utils.git

URIのgit@部分を参照してください。

PS: キーのデプロイ についても読んでください。

PPS:私のインストールでは、 "git + ssh" URIスキームは "編集可能"な要件でのみ動作します。

pip install -e URI#Egg=EggName

覚えておいてくださいpipコマンドでリモートのアドレスを使用する前に、:が印刷するgit remote -v文字を/文字に変更してください。

$ git remote -v
Origin  [email protected]:echweb/echweb-utils.git (fetch)
                      ^ change this to a '/' character

忘れた場合は、このエラーが発生します。

ssh: Could not resolve hostname github.com:echweb:
         nodename nor servname provided, or not known
301
oxyum

追加の手法として、プライベートリポジトリをローカルにクローンしている場合は、次の操作を実行できます。

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

編集:より現代的には、これを行うことができます(そして-eは変更が反映される前に変更をコミットする必要がないことを意味します)。

pip install -e C:\repo\directory
65
Scott Stafford

このようにHTTPSのURLを使って直接行うことができます。

pip install git+https://github.com/username/repo.git

これは、例えばDjangoプロジェクトのRequirements.txtにその行を追加するだけでも機能します。

45
danius

Bitbucketでも動作します。

pip install git+ssh://[email protected]/username/projectname.git

この場合、PipはあなたのSSH鍵を使用します。

24
gnrfan

要件ファイルの構文は次のとおりです。

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

インストールしたいだけなら。

14
Rachel

私はSSH鍵よりもトークンを使うほうがずっと簡単だとわかりました。私はこれについてあまり良いドキュメントを見つけることができなかったので、主に試行錯誤を通してこの解決策に出会いました。さらに、pip&setuptoolsからのインストールには微妙な違いがいくつかあります。しかし、この方法は両方に有効です。

GitHubは(現在、2016年8月現在)プライベートリポジトリのZip/tarballを取得する簡単な方法を提供していません。それで、あなたはsetuptoolsを指して、あなたがgitリポジトリを指していることをsetuptoolsに伝える必要があります。

from setuptools import setup
import os
# get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/
github_token = os.environ['GITHUB_TOKEN']

setup(
    # ...
    install_requires='package',
    dependency_links = [
    'git+https://{github_token}@github.com/user/{package}.git/@{version}#Egg={package}-0'
        .format(github_token=github_token, package=package, version=master)
        ]

ここでいくつかのメモ:

  • プライベートリポジトリの場合は、GitHubで認証する必要があります。私が見つけた最も簡単な方法は、認証トークンを作成し、それをあなたの環境にドロップしてから、それをURLに含めることです。
  • PyPIにパッケージがない場合でも、リンクの最後にsomeバージョン番号(これは0です)を含める必要があります。これはWordではなく実際の数字である必要があります。
  • Zip/tarballを指すのではなく、リポジトリを複製することをsetuptoolsに指示するには、git+を先頭に付ける必要があります。
  • versionは、ブランチ、タグ、またはコミットハッシュです。
  • Pipからインストールする場合は--process-dependency-linksを提供する必要があります。
11
Maximilian

パスワードの入力を要求しないGitLabプライベートリポジトリを自動的に「ピップインストール」する方法を考え出しました。このアプローチではGitLabの「キーのデプロイ」とSSH設定ファイルを使用するので、個人のSSHキー以外のキーを使用してデプロイすることができます(私の場合は「bot」で使用します)。おそらく誰かが親切な魂がGitHubを使って検証することができます。

新しいSSHキーを作成します。

ssh-keygen -t rsa -C "GitLab_Robot_Deploy_Key"

ファイルは~/.ssh/GitLab_Robot_Deploy_Keyおよび~/.ssh/GitLab_Robot_Deploy_Key.pubとして表示されます。

~/.ssh/GitLab_Robot_Deploy_Key.pubファイルの内容をコピーしてGitLabの[キーの配置]ダイアログに貼り付けます。

新しいデプロイキーをテストする

次のコマンドはSSHに新しいデプロイキーを使用して接続を設定するように指示します。成功すると、「GitLabへようこそ、UserName!」というメッセージが表示されます。

ssh -T -i ~/.ssh/GitLab_Robot_Deploy_Key [email protected]

SSH設定ファイルを作成する

次に、エディタを使って~/.ssh/configファイルを作成します。以下の内容を追加してください。 'Host'の値は、あなたが望むものなら何でもかまいません(後でそれを使うことになるので、ただ覚えておいてください)。 HostNameはGitLabインスタンスへのURLです。 IdentifyFileは、最初のステップで作成したSSH鍵ファイルへのパスです。

Host GitLab
  HostName gitlab.mycorp.com
  IdentityFile ~/.ssh/GitLab_Robot_Deploy_Key

SSHで設定ファイルを指定する

@ oxyum SSHでpipを使うためのレシピを教えてくれました:

pip install git+ssh://[email protected]/my_name/my_repo.git

SSHで新しいデプロイキーを使用するようにするには、少し修正する必要があります。これを行うには、SSH設定ファイルのHostエントリをSSHでポイントします。コマンドの 'gitlab.mycorp.com'をSSH設定ファイルで使用したホスト名に置き換えてください。

pip install git+ssh://git@GitLab/my_name/my_repo.git

これでパッケージはパスワードなしのプロンプトでインストールされます。

参照A
文献B

11
JS.

私がgithubからインストールしていたとき、私は使うことができました:

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

しかし、私はSudoとしてpipを実行しなければならなかったので、SSHキーはもうgithubで動作していませんでした、「git clone」は「Permission denied(publickey)」で失敗しました。 git+httpsを使うことで私はSudoとしてコマンドを実行することができ、そしてgithubに私のユーザ/パスワードを尋ねてもらうことができました。

Sudo pip install git+https://github.com/<username>/<projectname>.git#Egg=<eggname>
7
jcarballo

また、 git + https://github.com/... のURLを使ってプライベートなリポジトリ依存関係をインストールすることもできます。 .netrcファイルで curl の場合は(またはトークンを展開します。)

echo "machine github.com login ei-grad password mypasswordshouldbehere" > ~/.netrc
pip install "git+https://github.com/ei-grad/my_private_repo.git#Egg=my_private_repo"
5
ei-grad

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-tokenGIT_PASS=${CI_JOB_TOKEN}を使いました。

この方法には明らかな利点があります。あなたはすべての依存関係を含む単一の要件ファイルを持っています。

1
AmirHossein

oxyum's 解決策はこの答えには大丈夫です。キーもrootに格納する必要があるのでSudoを使ってインストールする場合は注意が必要です(例:/root/.ssh)。

それからあなたはタイプすることができます

Sudo pip install git+ssh://[email protected]/echweb/echweb-utils.git

0
Andres Romero

試してもいいですか

pip install [email protected]/my_name/my_repo.git

sshがなければ:...それは私のための仕事です。

0
user2235670

Sshを使いたくない場合は、httpsのURLにユーザー名とパスワードを追加できます。
以下のコードは、あなたがあなたのパスワードを含む作業ディレクトリに "pass"と呼ばれるファイルがあると仮定しています。

export PASS=$(cat pass)    
pip install git+https://<username>:[email protected]/echweb/echweb-utils.git
0
sam

Github/gitlabなどに独自のライブラリ/パケットがある場合は、具体的なバージョンのライブラリでコミットするタグを追加する必要があります。 v2.0あなたはあなたのパケットをインストールすることができます

pip install git+ssh://link/name/[email protected]

これは私のために働きます。他の解決策は私のために働いていませんでした。

0
zolty13