在我工作场所的python项目中,我们使用标准的需求文件安装了一些PyPI的软件包,以及一些Gemfury的私人公司软件包
读完这篇文章:https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
我们的需求文件类似于:
--index-url <OUR_GEMFURY_URL>
--extra-index-url https://pypi.python.org/simple
aiohttp==3.7.1
simplejson==3.17.1
<our-package>==1.0.0
<our-other-package>==1.2.0
我试着阅读一些pip的文档,但我无法完全理解它是如何选择从哪里下载软件包的。 例如,如果有人将恶意版本1.0.0上载到pypi prod,会发生什么情况?pip如何知道要获取哪一个包? 是否有一种方法可以指定特定包的topip,以便只在--index url中搜索它
如何防止代码中的依赖项混淆? 谢谢你的帮助
本文提到了pip使用的算法:
因此,如果您的脚本需要
<our-other-package>>=1.2.0
,您可以从公共pypi服务器获得一些mailicios包,如果它的版本高于您打算安装的版本文章中提到的简单解决方案是删除
extra-index-url
如果
package 1.0
是内部或外部包,并且存在于私有pypi服务器中,则将从那里下载外部软件包将通过内部pypi服务器从公共pypi服务器下载,内部pypi服务器将缓存这些软件包以备将来使用
我还建议在requirements.txt中有明确的版本,这样您就可以知道您得到的版本,并通过增加版本进行有意识的升级
总结这些指南(这些指南并非详尽无遗,并防止出现所有可能的安全漏洞)
pip.conf
、requirements.txt
和自动化脚本中删除extra-index-url https://pypi.python.org/simple
李>相关问题 更多 >
编程相关推荐