gitリポジトリからpip-installするときに#egg = fooが選ばれる理由


95

「pipinstall-e ...」を実行してgitリポジトリからインストールする場合、#egg = somenameを指定する必要があります。そうしないと、pipが文句を言います。例えば:

pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app

この「卵」文字列の意味は何ですか?


1
この部分のpip installドキュメントは語る#egg=nameが、明確な答えを与えるものではありません。
クリスチャンロング

回答:


35

per pip install -h "egg"文字列は、インストールの一部としてチェックアウトされるディレクトリです。


12
これはリポジトリと同じ名前にすることはできますか?ケースは重要ですか?
CMCDragonkai 2013年

14
「チェックアウトされるディレクトリ」?では、ブランチ名を入力しますか?何かを作ります?
クリス

1
カスタムPythonパッケージを作成した場合、setuptoolsを実行すると、という名前のディレクトリproject-name.egg-info/top_level.txtが作成されているはずです。このファイルの内容をeggパラメーターの値として使用します。
dspacejs 2017年

2
egg=...設定が実際に重要かどうかわからないようです。インストールしているパッケージのtop_level.txtファイルに複数のエントリがあります。nameスクリプトが使用するkwargsetup.pyだけでなく、任意の値にも一致させることを試みました。結果はどちらの方法でも同じようです。をpip install https://...必要としない構文を使用してインストールしていることに注意してください-e
テイラーエドミストン2017

7

pipがそのURLで何を期待するかを認識できるように、#egg = Packageを含める必要があります。https://pip.pypa.io/en/stable/reference/pip_install/#vcs-supportを参照してください

卵の詳細


20
それは「pipがそのURLで何を期待するかを知っている」とはどういう意味ですか?そのようなURLに追加するのに有効な#egg以外のものはありますか?
Lorin Hochstein 2012

私は実際のウィルの答えのようにpip install -hSource will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)私は...それは他の場所で使用されていることはよく分からない
Skylar Saveland

クローンされていますが、インストールされていません:(
holms 2016年

6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-supportによると:

URLサフィックス「egg =-」の「プロジェクト名」コンポーネントは、pipがメタデータをダウンロードして分析する前に、依存関係ロジックでpipがプロジェクトを識別するために使用します。卵名のオプションの「バージョン」コンポーネントは機能的に重要ではありません。これは、使用されているバージョンに関する人間が読める手がかりを提供するだけです。setup.pyがプロジェクトのルートにないプロジェクトの場合、「サブディレクトリ」コンポーネントが使用されます。「サブディレクトリ」コンポーネントの値は、プロジェクトのルートからsetup.pyが配置されている場所までのパスである必要があります。

このことから、egg値は依存関係のチェックにのみ使用されると推測します。したがって、慣例により、some-pypi-package-name含まれているフォルダー(ie some_pypi_package_name)ではなく、パッケージ名(ie )を使用する必要があると思います。


5

Eggは、バンドルされたPythonコードです。git URLでは、eggはプロジェクト名です。 VCSサポート

通常、PythonパッケージはPypiからインストールされるため、パッケージ名とバージョンのみを指定します(または、指定しない場合は最新バージョンを想定します)。次に、Pypiは必要な卵を検索し、pipがそれをインストールします。 pip install celery公開された最新のeggをpip install celery[redis]インストールし、同じceleryパッケージを含む別のeggをインストールし、celeryのsetup.pyでredisの依存関係としてリストされているパッケージから最新のeggをインストールします。

gitおよびgitlabパスでは、を指定します/{user|group}/{repository}.git@{tag}#egg={package-name}。との間に違いが#egg=celeryあります#egg=celery[redis]、彼らは両方とも同じソースコードから来ます。

「タグ」は、実際のタグに加えて、ブランチまたはコミットハッシュにすることもできます。master指定しない場合と想定します。

たとえば、git+https://github.com/celery/celery.git#egg=celery==4.3.0マスターブランチをチェックアウトしてインストールします。バージョン番号を指定した場合でも、インストールでは考慮されません。バージョン番号は無視されます

gitまたは他のVCSURLを介してインストールする場合は、必要なバージョンのタグまたはハッシュを見つける必要があります。たとえば、git+https://github.com/celery/celery.git@v4.3.0#egg=celery「v4.3.0」とタグ付けされたコミットをチェックアウトし、そのソースコードからパッケージをインストールします。メンテナがリポジトリにひどく誤ったタグを付けていないと仮定すると、そのようなバージョンを取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.