当前位置: 首页 > 网络应用技术

python中的依赖关系处理

时间:2023-03-08 11:20:49 网络应用技术

  对于许多人来说,依赖是一场噩梦。有些人甚至认为这是技术债务。管理软件的库列表是一种糟糕的体验。- 这听起来像是胡说八道。

  请继续关注我,因为我将帮助您更好地掌握您在实践中无法摆脱的东西 - 除非您非常富有和有才华,否则您可以在没有代码的情况下生活。

  首先,我们需要清楚地理解有关依赖性的一些知识:依赖关系有两种类型。几年前,Donald Stuff关于此主题的文章比我想写的要好。简单地说,它们是两种类型的代码类型取决于外部代码的包装:应用程序和库。

  python库应以一般方式指定其依赖项。库不需要请求2.1.5:这是毫无意义的。如果每个库都需要不同的请求版本,我们不能同时使用它们。不是很紧张,想快速改善,最重要的是不要害怕痛苦。建议您可以与维度联系:762459510,这真的很好,许多人有所改善,您需要害怕痛苦。IntersectionU您可以添加并看一看?

  需要根据版本编号的范围来声明库。重新测试> = 2是正确的。如果您知道requests2.x不适合库,那么请求> = 1,<2也正确。您的版本定义的问题是代码和依赖项项目之间API兼容的问题 - 没有其他问题。这是库可以控制语义版本的充分理由。

  因此,依赖性应以setup.py编写,类似于::

  这样,任何应用程序都可以轻松地使用库并与其他应用程序共存。

  申请只是图书馆的特殊情况。它们无意由其他应用程序库(导入)重复使用,尽管没有什么可以阻止它在实践中。

  最后,这意味着您应该在应用程序设置中指定依赖项作为库指定依赖项。

  主要区别在于,通常将应用程序部署在生产环境中以提供其服务。部署需求已重复使用。为此,您不能仅仅依靠setup.py:因为对请求的依赖范围也是如此宽。当重新使用应用程序时,您希望随时更改版本。

  因此,您需要不同版本的管理机制来处理部署,而不仅仅是设置。

  PIPENV在其文档中总结了这一点。它将依赖类型的类型分为抽象的依赖性和特定依赖项:基于范围(例如库)的抽象依赖关系(例如库),并用准确的版本(例如应用程序部署)指定了特定的依赖项 - 我们看到的在这里,我们在这里看到。

  需求.txt文件已被用来解决长期以来复制应用程序部署的问题。它的格式通常是这样的:

  每个库将自己指定为Micro版本。此确保每个部署都将安装相同的版本依赖项。要求使用。TXT是一个简单的解决方案,它也是实现复制部署的第一步。。

  实际上,尽管您可以指定所需的请求的版本,但如果请求取决于Urllib3,则将使PIP安装Urllib 2.1或Urllib 2.2.2.2.您不知道要安装哪个,这不会使您的部署变得部署100%重用。

  当然,您可以在您的需求中复制所有请求依赖项。txt,但这将是一种疯狂的方法!

  应用依赖树有时可能非常深且复杂。

  可以使用各种技术来修复此限制,但是真正的救主是Pipenv和Poetry。他们解决此问题的方式与其他编程语言中的许多袋子经理相似。它们生成一个带有列表和版本编号的锁定文件其中包含所有已安装的依赖项(及其自己的依赖性等)。这可以确保部署是100%重复使用的。在本文中,如果您的时间不是很紧张并且想快速改善,那么最重要的事情就不是要害怕痛苦。建议您可以与维度联系:762459510,这真的很好,许多人有所改善,您需要害怕痛苦。IntersectionU您可以添加并看一看?

  请检查他们的文档以了解如何设置和使用它们!

  现在,您已经有了一个锁定文件,可以确保您的部署在短时间内可用,然后您还有另一个问题。如何确保依赖项是最新的?这是一个真正的安全问题,如果您将版本倒退,您也可能会错过修复和优化的机会。

  如果您的项目托管在GitHub上,disterabot是解决此问题的好解决方案。当您的锁定文件中列出的库的新版本可用时,此应用程序将在存储库上自动创建合并请求。例如,如果您已使用Redis 3.3.6部署您的应用程序,当发布新版本的REDIS 3.3.7时,Displabot将创建一个已更新为REDIS 3.3.7.的合并请求,此外,Displabot还支持Enesuble.txt,Pipenv和Poetry。呢

  Displyabot正在为您更新Jinja2

  它即将成功。

  创建合并的请求后,您的连续集成系统将启动,部署项目并运行测试。如果一切正常,则可以合并您的合并请求。但是您真的需要您参与此过程吗?

  除非您个人不喜欢特定的版本编号:“哦,我的天哪,我讨厌以3结尾的版本。遇到它总是不好的。或者,除非您没有自动测试,否则人类,人类,人类无用,对没用。.此合并可以自动化。

  Mergify扮演角色。Mergify是一个GitHub应用程序,它允许您定义如何合并和合并请求的精确规则。以下是我在每个项目中使用的规则:

  当规则完全匹配时,合并将报告。

  一旦您的连续集成系统通过,合并将为您合并合并请求。

  然后,您可以自动触发部署挂钩以更新生产部署并立即安装新的库版本。这将使您的应用程序始终使用较新的库进行更新,并且不会落后几年的分发。

  如果存在任何错误,您仍然可以从依赖关系中恢复 - 如果您想使用合并规则,则也可以自动恢复提交。

  对我来说,这是依赖生命周期的当前状态。尽管这非常适用于Python,但它也可以应用于使用类似模式的许多其他语言,例如节点和NPM。