Setup.pyにdependency_linksがあります:
...
dependency_links = ['http://github.com/robot-republic/python-s3/tarball/master.tar.gz#Egg=python-s3'],
...
しかし、それは機能しません。ただし、install_requiresは正常に機能します。たぶん、setup.pyに必要なgitリポジトリを設定する別の方法がありますか?
この回答 役立つはずです。簡単に言えば、#Egg=python-s3
のように見えるように、#Egg=python-s3-1.0.0
のバージョン(または "dev")を指定する必要があります。
@Cerinのコメントに基づく更新:
--process-dependency-links
があります。以下の点に同意するため、テストしていません。これは古い質問だと思いますが、私と同じようにここにいる場合は、これが私にとってうまくいったことです。
他のGitHub(pypi以外)パッケージに依存するGitHub(pypiに登録されていない)にパッケージがあります。これを正しく処理するためにピップを取得する方法を見つけようとして、私は膨大な時間を費やしました。ここで修正するために行ったことを含めます。
Requirements.txtファイルに依存関係を置くことは、依存関係をリストする好ましい方法です。ただし、セットアップでinstall_requiresを設定する必要もあります。この段階で、pitがGitHubから依存関係をインストールしたくないという障害に遭遇しました。
この質問への回答を含むほとんどの場所では、セットアップのdependency_linksセクションにデータを入力するように指示しています。 ただし、dependency_linksで参照されるパッケージの名前をinstall_requiresフィールドに入力する必要もあります。
たとえば、requirements.txtに次が含まれている場合。
somepackage==1.2.0
https://github.com/user/repo/tarball/master#Egg=repo-1.0.0
anotherpackage==4.2.1
次に、セットアップコールは次のようになります。
setup(
name='yourpackage',
version='1.7.5',
packages=[],
url='',
license='',
author='',
author_email='',
description='',
install_requires=[
'somepackage==1.2.0',
'repo==1.0.0',
'anotherpackage==4.2.1'
],
dependency_links=[
'https://github.com/user/repo/tarball/master#Egg=repo-1.0.0'
]
)
さて、これでパッケージの構成が完了しました。インストールは次のタスクです。これは私が多くの時間を費やした場所です。 dependency_linksの指定が明らかに何もしない理由を理解できませんでした。秘Theは、場合によっては、pipに対してallow-all-external(より具体的な場合もあります)フラグを設定する必要があることです。例えば:
pip install git+https://github.com/user/anotherrepo.git
--process-dependency-links --allow-all-external
完了し、動作します!
免責事項:dependency_linksとフラグprocess-dependency-linksとallow-all-externalは廃止予定なので、すぐに削除されます。私が費やした時間では、より良い、好まれる方法を見つけることができず、ピップ機能はまだ適切にありました。
pipバージョン18.1 PEP 508 URL がサポートされているため。つまり、廃止されたdependency_linksはもう必要ありません。代わりに、install_requiresリストに直接依存関係を記述します。 @Chadの例は次のようになります。
setup(
name='yourpackage',
version='1.7.5',
packages=[],
url='',
license='',
author='',
author_email='',
description='',
install_requires=[
'somepackage==1.2.0',
'repo==1.0.0 @ https://github.com/user/archive/master.Zip#Egg=repo-1.0.0',
'anotherpackage==4.2.1'
],
)
パッケージをインストールするには、次のように書くことができます。
pip install yourpackage
(--process-dependency-linksなし)
特にプライベートリポジトリからインストールする場合に見つかったいくつかの問題に関するいくつかのメモ。
Pipと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
を指定する必要がありますこれは新しい構文であるため、最初にpipバージョンをアップグレードします。
pip install pip --upgrade
次に、以下を実行します。
install_requires=[
'bleualign-git @ https://github.com/rsennrich/Bleualign/archive/<commit-hash or branch-name>.Zip#Egg=bleualign-git-1.0.0'
]
お役に立てれば。
コメント:
良い答え(賛成)。ただし、実際の結果はプラットフォームやpipのバージョンに依存する可能性が高いことにも言及してください。 動作するとき 、または 一見動作するが、指定されたリンクから依存関係を実際にプルしなかった 、または単純に 拒否されている を見ました。そのため、これを短時間の回避策としてのみ使用することになるでしょう。可能な限り主流の方法に固執します。