gpt4 book ai didi

python - 避免python中的依赖混淆

转载 作者:行者123 更新时间:2023-12-04 13:53:44 25 4
gpt4 key购买 nike

在我在工作场所工作的 python 项目中,我们使用标准需求文件安装了一些来自 PyPI 的包和一些来自 Gemfury 的私有(private)公司包。
看完这篇文章: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 如何知道要获取哪个包?
有没有办法为特定包指定 pip 以仅在 --index-url 中搜索它?
您如何防止代码中的依赖项混淆?
谢谢您的帮助!

最佳答案

文章提到了pip使用的算法:

  • 检查指定(内部)包上是否存在库
    索引
  • 检查公共(public)包索引(PyPI)上是否存在库
  • 安装找到的任何版本。如果两个包都存在,则默认从具有更高版本号的源安装。

  • 因此,如果您的脚本需要 <our-other-package>>=1.2.0 ,如果它高于您打算安装的版本,您可以从公共(public)pypi服务器获取一些mailicios包。
    文章中提到的直接解决方案是删除 --extra-index-urlpackage 1.0是内部或外部包并且存在于私有(private) pypi 服务器中,它将从那里下载。
    外部包将通过内部 pypi 服务器从公共(public) pypi 服务器下载,这将缓存它们以备将来使用。
    我还建议在 requirements.txt 中有明确的版本,这样您就可以了解您获得的版本并通过增加版本进行有意识的升级。
    总结指南(绝不是详尽无遗的,可以防止所有可能的安全漏洞)
  • 删除 --extra-index-url https://pypi.python.org/simple来自 pip.conf , requirements.txt和自动化脚本。
  • 在 requirements.txt 中指定内部和外部包的显式版本
  • 关于python - 避免python中的依赖混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66242072/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com