setuptoolsにPyPIにないパッケージをインストールさせるにはどうすればよいですか?


142

私はsetuptoolsとvirtualenvを使い始めました。私のパッケージには、GitHubからのみ入手可能な最新のpython-gearmanが必要です。PyPIにあるpython-gearmanバージョンは古いバージョンです。Githubソースはsetuptools互換です。つまり、setup.pyなどがあります。PyPIで探して古いバージョンをインストールする代わりに、setuptoolsに新しいバージョンをダウンロードしてインストールする方法はありますか?

参考までに、新しいpython-gearmanはhttp://github.com/mtai/python-gearmanです。


1
そこからソースをダウンロードpython setup.py installしてソースディレクトリで使用するのではなく、Gitから直接pythonパッケージをインストールしようとしている理由はありますか?
Andrew

4
パッケージを複数のマシンに展開し、そのすべての依存関係を自動的にインストールしたいのですが。
andrei

2
easy_installまたはpipを使用して、Githubから直接インストールできます。しかし、別の解決策もあります。パッケージをPyPIに追加することを検討しましたか?
10

2
これは単にデプロイ用なので、使用しないのはなぜbuildoutですか?既製のGitプラグインがいくつかあります。
10

ここでのソリューション:stackoverflow.com/a/17442663/1841871
zazabe 2014年

回答:


156

重要なのは、パッケージをダウンロードできる場所をeasy_installに伝えることです。この特定のケースでは、URL http://github.com/mtai/python-gearman/tarball/masterにあります。ただし、easy_installは取得するURLを見ただけでは判断できないため、そのリンク自体は機能しません。

代わりにhttp://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0betaに変更することで、easy_installはパッケージ名とそのバージョンを識別できるようになります。

最後のステップは、パッケージのdependency_linksにURLを追加することです。例:

setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)

これで、パッケージがインストールされているとき、easy_installは、そのURLからダウンロードできる「gearman 2.0.0beta」があることを検出し、「gearman> = 2.0.0beta」を指定した場合は、PyPI上のものよりもうまく選択します。依存関係で

(通常、この種の方法は、自分のPyPIページにダウンロード可能なソースへのリンクを含めることです。この場合、gearmanパッケージの作成者が上記のようなリンクを含めていれば、すでに設定されています。 。通常、開発バージョンに「myproject-dev」のマークを付けてから、「myproject> = somever、== dev」の要件を使用します。これにより、somever以上のパッケージがない場合、easy_installはリリースをチェックアウトまたはダウンロードしてください。)

--process-dependency-linksを使用するときに指定する必要がありますpip。依存関係リンクの処理は推奨されておらず、将来のリリースでは削除される予定です。


1
私はあなたが提案したことをしましたが、「python setup.pydevelop」を実行すると、「foo.egg-info / dependency_links.txtへのdependency_linksの書き込み」と表示されますが、実際にはパッケージをダウンロードしてインストールしません。それが役立つ場合は、setuptoolsベースのvirtualenvを使用しています。
andrei

15
また、install_requires = 'gearman> = 2.0.0beta'も必要です。それを含めましたか?
PJ Eby 2010

3
betaPyPIの既存のバージョンにサフィックスが付いているため、私には機能しません。パッケージは、で定義されているものではなく、PyPIからインストールされdependency_linksます。でPyPIに存在するバージョンよりも高いバージョンを設定しようとすると#egg=package-version、セットアップツールはCould not find a version that satisfies the requirementエラーとPyPIで利用可能なすべてのバージョンのリストを表示します。でパッケージをビルドしてsdistから、でインストールしようとしていることに注意してくださいpip install http://url/to/my/generated/tar
ザザベ2014年

1
easy_install http://url/to/my/generated/tarはい、パッケージをでインストールすると、すべてが期待どおりに機能します...なぜだと思いますか?
ザザベ2014年

3
--process-dependency-linkspip19に削除されました!参照:github.com/pypa/pip/issues/6162
フェニックス

67

このpip install protocol+location[@tag][#egg=Dependency]形式を使用して、pipを使用してソースから直接インストールできます。

ギット

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#egg=ProjectName

Mercurial

pip install hg+https://hg.myproject.org/MyProject/

SVN

pip install svn+svn://svn.myproject.org/svn/MyProject

Bzr

pip install bzr+http://bzr.myproject.org/MyProject/trunk

次のプロトコルがサポートされています。 [+git, +svn, +hg, +bzr]

バージョン

@tag チェックアウトする特定のバージョン/タグを指定できます。

#egg=name プロジェクトを他の依存関係として指定できます。

順序は常にでなければなりません@tag#egg=name

プライベートリポジトリ

プロトコルをSSHに変更し(ssh://)、適切なユーザーを追加して、プライベートリポジトリからインストールすることもできます(git@):

git+ssh://git@github.com/username/my_private_repo

ユーザー名/パスワードを使用してプライベートリポジトリからインストールすることもできます。

git+https://<username>:<password>@github.com/<user>/<repo>.git

Githubは、循環可能な個人用OAuthトークンを作成する機能を提供します

git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

requirements.txt

requirements.txt プロジェクトの依存関係を指定するために使用されます:

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

これらはパッケージとともに自動的にはインストールされないため、コマンドを使用してインストールする必要がありますpip -r requirements.txt

要件ファイルを含む

要件ファイルには、他の要件ファイルを含めることができます。

requirements-docs.txt

sphinx
-r requirements-dev.txt

requirements-dev.txt

some-dev-tool
-r requirements.txt

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

要件ファイルはsetup.py、次のコマンドで指定された依存関係をインストールできます。

-e .

setup.py上記と同じ構文を使用してリポジトリからインストールすることもできますがdependency_linksこの回答に記載されている値を使用します。

参照:

https://pip.pypa.io/en/latest/user_guide.html#installing-packages https://pip.pypa.io/en/latest/reference/pip_install.html


2
setup.pyはリポジトリからインストールできます。「setup.py dependency_links」を検索するだけ
TomDotTom

1
@TomDotTom Derp、私はその回答に賛成票を投じましたが、どういうわけか同化しませんでした= P私は回答を更新します。指摘してくれてありがとう!それは私がしているいくつかのことを助けるでしょう。
Rebs

dependency_linksは廃止されていると思います(?)github.com/pypa/pip/issues/3939。私はこの答えが大好きで、(setup.pyで)できるため、より良いと思います:extras_require={'all': [repo @ git+https://github.com/username/repo.git]}
Josiah L.

21

私はちょうど同じことをしなければならなかったとして、私はこれを行うための別の方法見つかったpipのは、--process-dependency-links中に削除される予定ですpipに従って19.0 このコメントを

pip 18.1には次の機能が含まれています

PEP 508 URL要件を依存関係として使用できるようにします。

PEP 508 の説明から、そのようなURL依存関係の構文は次のようになります。

最小限のURLベースのルックアップ:

pip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686

だからあなたの中でsetup.pyそれは次のようになります

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
   ...
   ]
)

リンクはアーカイブファイルであり、この回答で説明さているよう、リポジトリの特定のリリースまたはブランチである場合もあります。また、他のリポジトリホストでの作業については、その回答を参照してください。

私の知る限りでは、依存関係を更新する最も簡単な方法はpip install -I .、パッケージをディレクトリからインストールするときに使用することです。


これpip installは、git URLなど、サポートするすべてのものもサポートします#subdirectory=...か?それとも、異なる機能が互換性のない方法で公開されている、まったく新しい構文を思いついたのでしょうか。
レムラム

setuptoolsを使用せず、コマンドラインで依存関係を手動で管理する場合でも、@ Rebsの回答で説明されているアプローチを使用する必要があるようです。
Phil

1
ただ、この作品を確認するdistutils.core.setuppip 19.1.1
shouldsee

その結果はrequirements.txt、しかし、との互換性はありませんpip install -r requirments.txt
shouldsee

@shouldseeどちらrequirments.txtを参照していますか?
Phil

6

Vanilla setuptoolsはgitリポジトリからの直接ダウンロードをサポートしていませんが、次のようにそのページからいずれかのダウンロードソースリンクを使用できます。

easy_install http://github.com/mtai/python-gearman/tarball/master

したがって、このバージョンのpython-gearmanが、パッケージが配置されるサーバーに確実にインストールされるようにするには、パッケージをインストールする前に、easy_installを手動で実行する必要がありますか?
andrei 2010

easy_installを使用している場合は、そうです。しかし、他の人が指摘しているように、より高度な要件管理に切り替えるpipbuildout、より高度な要件管理を行うことができます。例を参照してください:pip.openplans.org/#requirements-files
Ned Deily

実際、easy_installを手動で実行する必要はありません。setup.pyにリンクを追加するだけです。詳細を説明した回答を書きます。
PJ Eby 2010

2
上記の私のコメントで述べたように、setup.pyは、gtiリポジトリからダウンロードできるdependency_linksを提供します
TomDotTom
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.