プライベートGitHubリポジトリに依存するプロジェクトのsetup.py
ファイルを作成しています。ファイルの関連部分は次のようになります。
from setuptools import setup
setup(name='my_project',
...,
install_requires=[
'public_package',
'other_public_package',
'private_repo_1',
'private_repo_2',
],
dependency_links=[
'https://github.com/my_account/private_repo_1/master/tarball/',
'https://github.com/my_account/private_repo_2/master/tarball/',
],
...,
)
setuptools
の代わりにdistutils
を使用しているのは、後者が this 回答ごとにinstall_requires
およびdependency_links
引数をサポートしていないためです。
上記のセットアップファイルは、404エラーでプライベートリポジトリへのアクセスに失敗します。これは、GitHubがプライベートリポジトリへの不正なリクエストに404を返すため、予想されます。ただし、setuptools
認証を行う方法がわかりません。
ここに私が試したものがいくつかあります:
pip
でリポジトリをインストールする場合と同様に、git+ssh://
のhttps://
の代わりにdependency_links
を使用します。 distribute documentation がそうすべきだと言っているにもかかわらず、setuptoolsがこのプロトコル(「不明なURLタイプ:git + ssh」)を認識しないため、これは失敗します。同じgit+https
およびgit+http
。
https://<username>:<password>@github.com/...
-それでも404を取得します(このメソッドは、コマンドラインからのcurl
またはwget
では動作しません-curl -u <username> <repo_url> -O <output_file_name>
は動作します)。
Setuptools(0.9.7)およびvirtualenv(1.10)を最新バージョンにアップグレードします。また、distributeのインストールを試みました この概要 は、setuptoolsにマージされたと言います。どちらにしても、サイコロはありません。
現在、プライベートリポジトリを個別にダウンロードする必要があるという警告をsetup.py
印刷するだけです。これは明らかに理想的とは言えません。行方不明になっていることは明らかですが、それが何であるかは考えられません。 :)
回答のない重複した質問 here 。
私はこれをpipでインストールするために機能させようとしましたが、上記はうまくいきませんでした。 [1]からPEP508標準を使用する必要があることを理解し、[2]から(少なくとも私の場合は)実際に機能する例を取得しました。
ご注意ください;これは、pip 18.1
上のPython3.6
で
setup(
name='<package>',
...
install_requires=[
'<normal_dependency>',
'<dependency_name> @ git+ssh://[email protected]/<user>/<repo_name>@<branch>',
],
)
この方法でパッケージを指定した後、インストールは正常に機能します(-e
設定でも--process-dependency-links
を指定する必要はありません)。
参考文献[1] https://github.com/pypa/pip/issues/4187 [2] https://github.com/pypa/pip/issues/5566
ここに私のために働いたものがあります:
install_requires=[
'private_package_name==1.1',
],
dependency_links=[
'git+ssh://[email protected]/username/private_repo.git#Egg=private_package_name-1.1',
]
Egg名にバージョン番号を含める必要があることに注意してください。そうしないと、パッケージが見つからないと表示されます。
私はこれに関する良いドキュメントを見つけることができませんでしたが、主に試行錯誤を通してソリューションに出会いました。さらに、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)
]
ここにいくつかの注意事項があります:
0
)を含める必要があります。これは、Wordではなく実際の数字でなければなりません。git+
を先頭に付ける必要がありますversion
は、ブランチ、タグ、またはコミットハッシュにすることができます--process-dependency-links
を指定する必要があります私は(ハックな)回避策を見つけました:
#!/usr/bin/env python
from setuptools import setup
import os
os.system('pip install git+https://github-private.corp.com/user/repo.git@master')
setup( name='original-name'
, ...
, install_requires=['repo'] )
セットアップスクリプトでシステムコールを使用することには倫理的な問題があることは理解していますが、これを行う別の方法は考えられません。
パブリックリポジトリの場合、githubのアーカイブURLを使用するとうまくいきます。例えば。
dependency_links = [
'https://github.com/username/reponame/archive/master.Zip#Egg=eggname-version',
]
編集:これは、パブリックgithubリポジトリでのみ機能するようです。コメントを参照してください。
dependency_links=[
'https://github.com/my_account/private_repo_1/tarball/master#Egg=private_repo_1',
'https://github.com/my_account/private_repo_2/tarball/master#Egg=private_repo_2',
],
上記の構文は、setuptools 1.0で動作するようです。現時点では、少なくとも「#Egg = project_name-version」をVCSの依存関係に追加する構文は、 distribute documentation に指定したリンクに記載されています。
トム・ヘムズの回答を介して、これが私にとって唯一働いたものであることがわかりました:
install_requires=[
'<package> @ https://github.com/<username>/<package>/archive/<branch_name>.Zip']