[英]Avoiding circular dependency when overloading operator __add__ in Python
[英]Avoiding dependency confusion in python
在我在工作场所工作的 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 的文档,但我无法完全理解它如何选择从哪里下载 package。 例如,如果有人将恶意版本 1.0.0 上传到 pypi-prod 会发生什么 - pip 怎么知道要使用哪个包? 有没有办法为特定的 package 指定 pip 以仅在 --index-url 中搜索它?
如何防止代码中的依赖混淆? 谢谢您的帮助!
文章提到算法 pip 使用:
因此,如果您的脚本需要<our-other-package>>=1.2.0
,如果它的版本高于您打算安装的版本,您可以从公共 pypi 服务器获取一些 mailicios package。
文章中提到的直接解决方案是删除--extra-index-url
如果package 1.0
是内部或外部 package 并且存在于私有 pypi 服务器中,它将从那里下载。
外部包将通过内部 pypi 服务器从公共 pypi 服务器下载,内部 pypi 服务器将缓存它们以供将来使用。
我还建议在 requirements.txt 中有明确的版本,这样您就可以知道您获得的版本并通过增加版本来进行有意识的升级。
总结指南(绝不是详尽的并防止所有可能的安全漏洞)
pip.conf
、 requirements.txt
和自动化脚本中删除--extra-index-url https://pypi.python.org/simple
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.