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


Answers:


35

每点安装-h“ egg”字符串是在安装过程中检出的目录


12
可以和存储库同名吗?案件重要吗?
CMCDragonkai 2013年

14
“被检出的目录”?那我要输入分支名称吗?做点什么?
克里斯(Chris

1
如果您已经制作了一个自定义Python程序包,则在运行setuptools时,project-name.egg-info/top_level.txt应该已经创建了一个名为目录。使用此文件的内容作为egg参数的值。
dspacejs

2
我似乎无法弄清楚egg=...设置是否真正重要。我正在安装的软件包在top_level.txt文件中有多个条目。我已经尝试过将其name与脚本使用的kwarg匹配,setup.py但也可以将其匹配为任意值。两种方法的结果似乎都是相同的。请注意,我正在使用pip install https://...不需要的语法进行安装-e
泰勒·埃德米斯顿

7

您必须包含#egg = Package,这样pip才能知道该URL的期望值。参见https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

更多鸡蛋


19
这是什么意思?“那么pip知道该网址会有什么期望?” 除了#egg之外,还有其他可以有效附加到此类网址的内容吗?
罗琳·霍希斯坦

其实我喜欢从威尔的答案pip install -hSource will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)我不知道它在别处使用...
斯凯勒Saveland

它已克隆但未安装:(
holms

6

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


5

一个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”的提交,然后从该源代码安装该软件包。假设维护人员没有过分地错误标记他们的存储库,则可以得到所需的版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.