我需要什么包版本?

时间:2014-01-09 22:55:09

标签: python

我正在开发一个使用其他几个软件包(numpy,scipy等等)的Python软件包,我想知道是否有一种简单的方法可以确定每个软件包需要的最低版本。例如,我需要scipy 0.11,因为我使用的一些函数在此之前不存在。是否有更简单的方法来解决它而不是检查我所做的每个函数调用?这需要一段时间......

我知道我可以只需要我当前正在运行的版本,但我不希望人们在不需要时更新一堆软件包(即我运行scipy 0.13,但不要'我需要要求)。

2 个答案:

答案 0 :(得分:4)

真的没有简单的方法可以做到这一点。任何类型的自动化工具都必须依赖于元数据,这些元数据告诉它每个函数,类等首先被添加到哪个库版本中。(即使这样,接口或行为可能在现有函数中发生了变化,在你依赖的方式。)大多数项目没有这样的信息;那些做的,它通常只是以类似于Python文档的形式(例如,here),你必须抓取和解析。

更好的解决方案是首先确保您有足够的测试覆盖率,然后只需安装scipy 0.11并进行测试。它有用吗?太好了,你支持0.11。如果没有,您可以尝试使其工作,或者只是说您需要0.12。

“足够”意味着什么取决于您的目标市场。对于支持合同的企业客户销售的商业程序需要对您声称支持的依赖项进行更严格的测试,而不是针对专家开发人员的开源库。

在某些情况下,无论您的代码是否适用于早期版本,您都可以记录您测试的内容,并将其打开。 0.11可能会或可能不会起作用,如果用户想要尝试它(特别是如果他们想要向你报告他们的经历,或者某些社区资源如wiki),请鼓励它,但不要承诺正式支持他们。 / p>

答案 1 :(得分:0)

以下是另一个SO Q / A会议建议:

“对于我编写的具有外部依赖关系(第三方库)的python内容,我编写了一个脚本,用户可以运行该脚本来检查他们的python安装,看看是否安装了相应版本的模块。

对于没有定义'version'属性的模块,您可以检查它包含的接口(类和方法),看它们是否与他们期望的接口匹配。然后在您正在处理的实际代码中,假设第三方模块具有您期望的接口。“

Checking a Python module version at runtime