web-dev-qa-db-ja.com

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

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

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

136
andrei

重要なのは、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ページに含めることです。この場合、ギアマンパッケージの作成者が上記のようなリンクを含めていれば、すでに設定されています。通常、開発バージョンを「myproject-dev」でマークし、「myproject> = somever、== dev」の要件を使用するため、somever以上のパッケージがない場合、easy_installはリリースをチェックアウトまたはダウンロードします。)

pipを使用する場合は、--process-dependency-linksを指定する必要があります。依存性リンクの処理は廃止され、将来のリリースで削除されることに注意してください。

153
PJ Eby

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

Git

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

マーキュリアル

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://[email protected]/username/my_private_repo

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

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

Githubは、循環可能な personal OAuth_ tokens を作成する機能を提供します

git+https://<oauth token>:[email protected]/<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は、上記と同じ構文を使用してリポジトリからインストールすることもできますが、 this answer で説明されているdependency_links値を使用します。

参照:

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

63
Rebs

同じことをしなければならなかったので、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 .を使用することです。

15
Phil

Vanilla setuptoolsは、gitリポジトリからの直接ダウンロードをサポートしていませんが、次のようなDownload Sourceリンクを使用できます。

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