116

当我执行“pip install -e ...”从 git repo 安装时,我必须指定 #egg=somename 或 pip 抱怨。例如:

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

这个“鸡蛋”字符串有什么意义?

4

5 回答 5

44

per pip install -h “egg” 字符串是作为安装的一部分检出的目录

于 2012-08-06T20:33:33.050 回答
21

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

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

于 2019-04-04T23:56:19.140 回答
10

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

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

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

于 2018-04-11T06:52:14.810 回答
8

您必须包含 #egg=Package 以便 pip 知道该 URL 会发生什么。请参阅https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

更多关于鸡蛋

于 2012-08-06T20:31:19.193 回答
0

引用手册

pip 查看 VCS URL 的 2 个片段:

egg:用于指定在 pip 的依赖解析逻辑中使用的“项目名称”。例如:egg=project_name

子目录:用于指定 Python 包的路径,当它不在 VCS 目录的根目录中时。例如:pkg_dir

于 2021-10-25T06:19:12.597 回答