加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python中的依靠相关处理赏罚

发布时间:2019-09-23 16:36:49 所属栏目:建站 来源:天天向上编译
导读:对很多人来说,依靠相关是一场恶梦。一些人乃至以为它们是技能债务。打点你的软件的库列表是一种可骇的体验。自动更新依靠项?-这听起来像是在说胡话。 请继承存眷我,由于我将辅佐你更好地把握一些你在实践中无法挣脱的对象除非你很是富有和有才能,可以或许在

对很多人来说,依靠相关是一场恶梦。一些人乃至以为它们是技能债务。打点你的软件的库列表是一种可骇的体验。自动更新依靠项?-这听起来像是在说胡话。

Python中的依靠相关处理赏罚

请继承存眷我,由于我将辅佐你更好地把握一些你在实践中无法挣脱的对象——除非你很是富有和有才能,可以或许在没有他人代码的环境下糊口。

起首,我们必要清晰地相识一些有关依靠相关的常识: 依靠相关有两种范例。Donald Stuff几年前写的关于这个主题的文章比我要写的都好。简朴一点来说,它们是依靠于外部代码的两种范例的代码包:应用措施和库。

库依靠

Python库应该以一种通用的方法来指定它们的依靠相关。一个库不该该要求requests 2.1.5:这没故意义。假如每个库都必要差异版本的requests,我们就不能同时行使它们。

库必要按照版本号的范畴来声明依靠相关。要求哀求requests>=2是正确的。假如你知道requests2.x不合用于该库,那么要求 requests>=1,<2 也是正确的。你的版本范畴界嗣魅正在办理的题目是你的代码和依靠项之间的API兼容性题目———没有其他题目。这是库尽也许行使语义版本节制的一个很好的来由。

因此,依靠相关应该写在setup.py中,相同于:

Python中的依靠相关处理赏罚

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

应用措施依靠相关

应用措施只是库的一种非凡环境。它们不规划被其他应用措施库重用(导入)——尽量在实践中没有什么可以阻止它。

最后,这意味着你应该像为一个库指定依靠相关一样来在应用措施的setup.py中指定依靠相关。

其首要区别在于,一个应用措施凡是陈设在出产情形中以提供其处事。陈设必要是可复用的。为此,你不能仅仅依靠于setup.py:由于哀求的依靠相关范畴太宽。在从头陈设应用措施时,你但愿随时都可以随意变动版本。

因此,你必要一个差异的版本打点机制来处理赏罚陈设,而不只仅是setup.py。

pipenv在其文档中有一节很好地总结了这一点。它将依靠相关范例分别为抽象依靠项和详细依靠项: 抽象依靠项基于范畴(譬喻 库),而详细依靠项是用准确的版本(譬喻应用措施陈设)指定的——正如我们在这里看到的。

处理赏罚陈设

requirements.txt文件恒久以来一向被用来办理应用措施陈设的可复用性题目。它的名目凡是是这样的:

Python中的依靠相关处理赏罚

每个库都将本身指定为微版本。这确保你的每个陈设都将安装沟通版本的依靠项。行使requirements.txt是一个简朴的办理方案,也是实现可复用陈设的第一步。然而,这还不足。

现实上,固然你可以指定你想要的requests的版本,可是假如requests依靠于urllib3,那么这将会使pip安装urllib 2.1或urllib 2.2。你无法知道哪一个会被安装,这并不能使你的陈设100%可重用。

虽然,你可以在你的requirements.txt中复制全部的requests依靠项,但那将是猖獗的做法!

Python中的依靠相关处理赏罚

一个应用措施依靠相关树偶然也许很是深入和伟大。

有各类百般的能力可以用来修复这个限定,可是真正的救星是pipenv和poetry。它们办理这个题目的要领相同于其他编程说话中的很多包揽理器。它们天生一个锁文件,个中包括全部已安装的依靠项(以及它们本身的依靠项等)的列表和版本号。这可以确保陈设是100%可复用的。

请查察它们的文档,相识怎样配置和行使它们!

处理赏罚依靠项更新

此刻,你已经有了锁文件,它可以确保你的陈设在短时刻内是可复用的,那么你就有了另一个题目。你怎样确保你的依靠项是最新的?这是一个真正的安详题目,并且保持版本落伍的话,你也许也会错过bug修复和举办优化的机遇。

假如你的项目托管在GitHub上,Dependabot是办理这个题目的一个很好的办理方案。当你的锁文件中列出的库的一个新版本可用时,在存储库上启用此应用措施将会自动创归并哀求。譬喻,假如你已经行使redis 3.3.6陈设了你的应用措施,当新版本redis 3.3.7宣布时,Dependabot将会建设一个更新到redis 3.3.7的归并哀求。另外,Dependabot还支持requirements.txt、 pipenv和poetry!

Python中的依靠相关处理赏罚

Dependabot正在为你更新jinja2

自动陈设更新

将近乐成了。你有一个呆板人,它让你知道你的项目必要的一个库的新版本是可用的。

一旦建设了归并哀求,你的一连集成体系就会启动、陈设你的项目并运行测试。假如统统正常,你的归并哀求就可以被归并了。可是在这个进程中真的必要你参加吗?

除非你小我私人出格反感某个特定的版本号——“天哪,我厌恶以3末了的版本。碰见它老是命运欠好。——可能除非你没有自动化测试,不然你,人类,是无用的。这个归并完全可所以自动化的。

这就是Mergify施展浸染的处所。Mergify是一个GitHub应用措施,它应承你界说关于怎样归并归并哀求的准确法则。下面是我在每个项目中都行使的一个法则:

Python中的依靠相关处理赏罚

当法则完全匹配时,Mergify会举办陈诉。

一旦你的一连集成体系通过,Mergify就会为你归并该归并哀求。

Python中的依靠相关处理赏罚

然后,你就可以自动触发你的陈设钩子来更新你的出产陈设,并当即安装新的库版本。这将使得你的应用措施老是行使较新的库举办更新,而且不会落伍于几年的刊行版。

假如呈现任何错误,你如故可以或许从Dependabot中规复提交——假如你但愿行使一个Mergify法则,你也可以自动化规复提交。

题外话

对我来说,这就是依靠相关打点生命周期今朝的状态。固然这对Python很是合用,但它也可以应用于行使了相同模式的很多其他说话,好比Node和npm。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读