当我执行“pip install -e ...”从 git repo 安装时,我必须指定 #egg=somename 或 pip 抱怨。例如:
pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app
这个“鸡蛋”字符串有什么意义?
per pip install -h “egg” 字符串是作为安装的一部分检出的目录
一个 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”的提交,然后从该源代码安装包。假设维护者没有严重错误地标记他们的存储库,您可以获得您想要的版本。
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
)
您必须包含 #egg=Package 以便 pip 知道该 URL 会发生什么。请参阅https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support
引用手册:
pip 查看 VCS URL 的 2 个片段:
egg:用于指定在 pip 的依赖解析逻辑中使用的“项目名称”。例如:egg=project_name
子目录:用于指定 Python 包的路径,当它不在 VCS 目录的根目录中时。例如:pkg_dir