当从git repo进行pip安装时,为什么#egg = foo

Lor*_*ein 79 python pip package

当我从git repo安装"pip install -e ..."时,我必须指定#egg = somename或pip complains.例如:

pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app
Run Code Online (Sandbox Code Playgroud)

这个"蛋"字符串有什么意义?

Wil*_*Ayd 29

每个pip install -h"egg"字符串是作为安装的一部分检出的目录

  • 这可能与存储库名称相同吗?案件是否重要? (11认同)
  • "签出的目录"?那么我输入分支名称吗?做点什么? (11认同)
  • 如果你制作了一个自定义的 Python 包,当你运行 setuptools 时,应该已经创建了一个名为“project-name.egg-info/top_level.txt”的目录。使用此文件的内容作为 `egg` 参数的值。 (2认同)
  • 我似乎无法弄清楚 `egg=...` 设置是否真的很重要。我正在安装的包在 top_level.txt 文件中有多个条目。我已经尝试将它与脚本在 `setup.py` 中使用的 `name` kwarg 匹配,但也匹配一个任意值。无论哪种方式,结果似乎都是一样的。请注意,我正在使用不需要 `-e` 的 `pip install https://...` 语法进行安装。 (2认同)

meh*_*guh 17

Egg 只是一些捆绑的 Python 代码。在 git url 中,egg 是项目名称。 VCS 支持

通常我们从 Pypi 安装 python 包,所以你只指定包名和版本(如果你不指定,它会假设最新版本)。Pypi 然后搜索您想要的鸡蛋并 pip 安装它。 pip install celery将安装最新发布的 egg 并pip install celery[redis]安装一个不同的包含相同 celery 包的 egg 并且还会安装来自 celery 的 setup.py 中作为 redis 依赖项列出的任何包中的最新鸡蛋。

使用 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 或其他 VCS url 安装时,您需要找到所需版本的标签或哈希。例如,git+https://github.com/celery/celery.git@v4.3.0#egg=celery它将检出标记为“v4.3.0”的提交,然后从该源代码安装包。假设维护者没有严重错误地错误标记他们的存储库,你可以获得你想要的版本。


Mar*_*rio 8

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support说:

url 后缀“egg=-”的“项目名称”组件是 pip 在其依赖逻辑中使用的,用于在 pip 下载和分析元数据之前识别项目。鸡蛋名称的可选“版本”组件在功能上并不重要。它仅提供有关正在使用的版本的人类可读线索。对于 setup.py 不在项目根目录中的项目,使用“子目录”组件。“子目录”组件的值应该是从项目根目录到 setup.py 所在位置的路径。

由此我推断出 egg 值仅用于依赖项检查,因此我认为,按照惯例,some-pypi-package-name应该使用包名称(即),而不是任何包含的文件夹(即some_pypi_package_name


Sky*_*and 7

您必须包含#egg = Package,因此pip知道该URL的内容.请参阅https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

更多关于鸡蛋

  • 这是什么意思"所以pip知道该网址会发生什么?" 除了#egg之外还有其他东西可以附加到这样的网址吗? (15认同)