问题:为什么从git repo进行pip安装时#egg = foo
当我执行“ pip install -e …”以从git repo安装时,我必须指定#egg = somename或pip抱怨。例如:
pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app
这个“蛋”字符串的意义是什么?
回答 0
每点安装-h“ egg”字符串是在安装过程中检出的目录
回答 1
您必须包含#egg = Package,这样pip才能知道该URL的期望值。参见https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support
回答 2
https://pip.pypa.io/zh_CN/stable/reference/pip_install/#vcs-support说:
pip使用其URL后缀“ egg =-”的“项目名称”组件的依赖关系逻辑在pip下载和分析元数据之前识别项目。蛋名称的可选“版本”组件在功能上并不重要。它仅提供有关使用哪个版本的信息。对于setup.py不在项目根目录中的项目,将使用“子目录”组件。“子目录”组件的值应该是从项目根目录到setup.py所在位置的路径。
据此,我推断出egg值仅用于依赖性检查,因此,我认为按照惯例,some-pypi-package-name
应使用包名称(即),而不要使用任何包含的文件夹(即some_pypi_package_name
)
回答 3
一个Egg只是一些捆绑的python代码。在git网址中,egg是项目名称。 VCS支持
通常,我们从Pypi安装python软件包,因此您仅指定软件包名称和版本(如果未指定,则假定为最新版本)。然后,Pypi搜索您想要的鸡蛋,然后pip安装该鸡蛋。 pip install celery
将安装最新发布的鸡蛋,pip install celery[redis]
并安装包含相同celery软件包的其他鸡蛋,并从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
将检出master分支并进行安装。即使您指定了版本号,在安装中也不会考虑。版本号被忽略
通过git或其他VCS网址进行安装时,您将需要查找所需版本的标签或哈希。例如,git+https://github.com/celery/celery.git@v4.3.0#egg=celery
它将签出标记为“ v4.3.0”的提交,然后从该源代码安装该软件包。假设维护人员没有过分地错误标记他们的存储库,则可以得到所需的版本。