requirements.txtに直接のgithubソースを記載する方法


448

コマンドを使用してライブラリをインストールしました

pip install git+git://github.com/mozilla/elasticutils.git

Githubリポジトリから直接インストールします。これは正常に機能し、その依存関係を私のに持ちたいと思っていrequirements.txtます。私はこのような他のチケットを見ましたが、それは私の問題を解決しませんでした。のようなものを入れた場合

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

requirements.txt、ファイル、pip install -r requirements.txt次の出力のような結果になります。

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

要件ファイルドキュメントにはgit+gitプロトコル指定子を使用したリンクについては記載されていないため、おそらくこれはサポートされていません。

誰かが私の問題の解決策を持っていますか?

回答:


327

「編集可能な」パッケージ構文を使用しrequirements.txtて、さまざまなVCS(git、hg、bzr、svn)からパッケージをインポートできます。

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

また、特定のコミットをポイントすることもできます。

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

3
私はそのような編集可能なバージョンをローカルでチェックアウトできなかったため(おそらく構文上の問題が原因で)、結局、git+gitバリアント(うまくいった)を使用することになりました。requirements.txtあなたのバージョンでは動作しますので、どうもありがとうございました:)
Alfe

1
docsリンクは私のために働いていませんでした。古いものを使用しまし
osa

42
私が理解しなかったのは、示された構文が要件に当てはまること、つまり-eの前にパッケージ名がないことです。
セージ

5
パッケージを編集可能モードにするかどうかに応じて、「-e」を追加する必要はありません。@ qffの回答を参照してください。
スカイ

17
-e git+git://代わりにすべきではない-e git://ですか?私が得た「のいずれかのローカルプロジェクトやsvn +、gitの+、HG +、またはのbzr +で始まるVCSのURLへのパスでなければなりません」のエラーメッセージが表示されます。
ブルースウェイン

424

通常、requirements.txtファイルは次のようになります。

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

Githubリポジトリを指定するには、package-name==規則は必要ありません。

以下の例はpackage-two、GitHubリポジトリを使用して更新します。間のテキスト@とは、#パッケージの詳細を示しています。

コミットハッシュを指定41b95ecします(更新されたコンテキストでrequirements.txt):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

ブランチ名を指定(master):

git+git://github.com/path/to/package-two@master#egg=package-two

タグを指定(0.1):

git+git://github.com/path/to/package-two@0.1#egg=package-two

リリースを指定(3.7.1):

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

ここで#egg=package-twoはコメントではないことに注意してください。これは、パッケージ名明示的に示すためのものです

このブログ投稿では、このトピックについてさらに議論が行われています。


54
他のすべての回答のうち、比較のために投入されたgitと「通常の」reqのブレンドを含む要件ファイルを示したものはないと信じられません。コマンドライン(-e)オプションのように見えたので、私はとても夢中になりました。両方のブレンドを見せてくれてありがとう。
Hendy

でのリリース3.7.1を指してもgit+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twoうまくいきませんでした。私のために働いたのはでしたgit+git://github.com/path/to/package-two@3.7.1#egg=package-two
ジャンポール

この回答は非常に役に立ちました。ただし、1つのこと。これらのgit+git://...表記は、どういうわけか私のLinuxボックスでssh相対エラーを引き起こしました。だから私はそれらをgit+https://...表記法に切り替えることになり、それからそれらは完全に機能します。
RayLuo

174

requirements.txt次の方法で、pip 7.0以降のgitリポジトリ内のパッケージへの依存関係を指定できます。1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

Githubの場合、次のことが可能です(省略されていることに注意してください-e)。

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

なぜ余分な答えですか?
私は多少混乱しました-e他の答えのフラグにので、ここに私の説明があります:

-eまたは--editableパッケージがインストールされていることをフラグ手段<venv path>/src/SomeProject深く埋設で、したがってない<venv path>/lib/pythonX.X/site-packages/SomeProjectそれ以外に置かれるであろう。2

ドキュメンテーション


9
ただし-e、次を省略すると、pip freezeこのパッケージの正しい結果が得られない場合があることに注意してください
Maccesch

82

最初に、git+gitまたはを使用してgit+https、ご存じの方法でインストールします。プロジェクトkronokののブランチをインストールする例brabeion

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

次に、を使用pip freeze > requirements.txtしてで正しいものを取得しますrequirements.txt。この場合、あなたは

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

3番目に、結果をテストします。

pip uninstall brabeion
pip install -r requirements.txt

4
pip freezeは、私がクローズした前バージョンとして使用しているパッケージをリストします。直接のgithubチェックアウトではない
Antoine Claval 2015

4
URLを生成するには、「pip freeze」に「-e」オプションを使用する必要があります
Janusz Skonieczny

2
pip 9.0.1:no such option: -e
2017年

つまりgit+https?あなたが言うテキストとgit+gitコードgit+https
Antony Hatchkins

@AntonyHatchkinsを修正しました。
osa

17

pip v1.5(2014年1月1日リリース:CHANGELOGPR)以降、モジュールを含むgitリポジトリのサブディレクトリを指定することもできます。構文は次のようになります。

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

注:pipモジュールの作成者として、可能であれば、モジュールを独自のトップレベルのリポジトリで公開することが理想的です。ただし、この機能は、サブディレクトリにPythonモジュールを含む既存のリポジトリに役立ちます。それらがpypiにも公開されていない場合、この方法でそれらをインストールすることを強いられるかもしれません。


1

私がpip3(v9.0.1、Ubuntu 18.04のパッケージマネージャーによってインストールされたもの)をインストールするように指示するものを実際にインストールするのは、ちょっとトリッキーだと思います。この問題に遭遇した人の時間を節約するために、この回答を投稿しています。

これをrequirements.txtファイルに入れることができませんでした:

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

「失敗した」とは、Gitからコードをダウンロードしている間に、PyPiで見つかった元のバージョンのコードを、そのブランチのリポジトリのコードではなく、インストールしたことを意味します。

ただし、ブランチ名の代わりにコミットをインストールすると機能します。

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

ブランチもリモートですか?
Alfe

それがあなたが疑問に思っているのであれば、それはローカルコピーを指していませんでした。
アカウント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.