Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免python中的依赖性混淆_Python_Pip_Dependencies_Gem Fury - Fatal编程技术网

避免python中的依赖性混淆

避免python中的依赖性混淆,python,pip,dependencies,gem-fury,Python,Pip,Dependencies,Gem Fury,在我工作场所的python项目中,我们使用标准的需求文件安装了一些PyPI的软件包,以及一些Gemfury的私人公司软件包 阅读本文后: 我们的需求文件类似于: --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

在我工作场所的python项目中,我们使用标准的需求文件安装了一些PyPI的软件包,以及一些Gemfury的私人公司软件包

阅读本文后:

我们的需求文件类似于:

--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
——索引url
--额外索引urlhttps://pypi.python.org/simple
aiohttp==3.7.1
simplejson==3.17.1
==1.0.0
==1.2.0
我试着阅读一些pip的文档,但我无法完全理解它是如何选择从哪里下载软件包的。 例如,如果有人将恶意版本1.0.0上载到pypi prod,会发生什么情况?pip如何知道要获取哪一个包? 是否有一种方法可以指定特定包的topip,以便只在--index url中搜索它

如何防止代码中的依赖项混淆?
谢谢你的帮助

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

  • 检查指定(内部)包上是否存在库 索引
  • 检查公共包索引(PyPI)上是否存在库
  • 安装找到的任何版本。如果两者上都存在该包,则默认从版本号较高的源安装
因此,如果您的脚本要求
=1.2.0
,那么如果它的版本高于您打算安装的版本,您可以从公共pypi服务器获得一些mailicios包

文章中提到的简单解决方案是删除
——额外的索引url

如果
包1.0
是内部或外部包,并且存在于私有pypi服务器中,则将从那里下载

外部软件包将通过内部pypi服务器从公共pypi服务器下载,内部pypi服务器将缓存这些软件包以备将来使用

我还建议在requirements.txt中有明确的版本,这样您就可以知道您得到的版本,并通过增加版本进行有意识的升级

总结这些指南(这些指南并非详尽无遗,并防止出现所有可能的安全漏洞)

  • 删除
    --额外索引urlhttps://pypi.python.org/simple
    来自
    pip.conf
    requirements.txt
    和自动化脚本
  • 在requirements.txt中指定内部和外部包的显式版本