【问题标题】:Why #egg=foo when pip-installing from git repo为什么从 git repo 进行 pip 安装时 #egg=foo
【发布时间】:2012-08-03 20:15:27
【问题描述】:

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

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

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

【问题讨论】:

标签: python package pip


【解决方案1】:

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

more on eggs

【讨论】:

  • 这是什么意思“所以 pip 知道该网址会发生什么?”除了#egg 之外,还有什么可以附加到这样的网址的吗?
  • 我其实很喜欢 Will 在pip install -hSource will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop) 的回答我不确定它是否在其他地方使用...
  • 已克隆但未安装:(
【解决方案2】:

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

【讨论】:

  • 这可以和存储库同名吗?案例重要吗?
  • "被检出的目录"?那么我要输入分支名称吗?编造点什么?
  • 如果你制作了一个自定义的 Python 包,当你运行 setuptools 时,应该已经创建了一个名为 project-name.egg-info/top_level.txt 的目录。将此文件的内容用作egg 参数的值。
  • 我似乎无法弄清楚egg=... 设置是否真的很重要。我正在安装的包在 top_level.txt 文件中有多个条目。我已经尝试将其与脚本在setup.py 中使用的name kwarg 匹配,但也是一个任意值。结果似乎都一样。请注意,我正在使用不需要-epip install https://... 语法进行安装。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    鸡蛋就是some bundled python code。在 git url 中,egg 是项目名称。 VCS Support

    通常我们从 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] 之间是有区别的,但它们都来自相同的源代码。

    "tag" 也可以是除了实际标签之外的分支或提交哈希。如果不指定,则假定为master

    例如,git+https://github.com/celery/celery.git#egg=celery==4.3.0 会检查 master 分支并安装它。即使您指定了版本号,安装时也不会考虑它。 版本号被忽略

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

    【讨论】:

      【解决方案5】:

      引用the manual:

      pip 查看 VCS URL 的 2 个片段:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-04
        • 2019-08-03
        • 1970-01-01
        • 2020-04-25
        • 2011-11-21
        相关资源
        最近更新 更多