2014-01-09 46 views
2

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

我知道我可以只需要我正在运行的版本,但我不希望人们不得不更新一堆包,如果他们不需要它(即我运行scipy 0.13,但不需要这样)。

回答

0

这里是另一个SO Q/A会议建议:

“对于蟒蛇的东西,我写的有外部依赖(第三方库),我写的是用户可以运行,以检查他们的蟒蛇安装到一个脚本查看是否安装了相应版本的模块

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

Checking a Python module version at runtime

+0

这不是他问的问题。他问的是如何弄清楚他需要的最低版本的scipy,而不是一旦他知道它如何检查最低版本。 (另外,解决你正在解决的问题有一个更简单的方法:'setuptools'。) – abarnert

+0

我在想,开发人员可以读取用户的scipy模块并验证用户的函数/方法/变量/属性scipy模块存在。如果没有,建议用户升级到当前版本。然而,提供测试套件似乎是一个非常实用的解决方案。 – LectureMaker

4

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

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

“充足”意味着什么取决于您的目标市场。用支持合同出售给企业客户的商业程序需要比针对专家开发人员的开源库更严格地测试您声称支持的依赖关系。

在某些情况下,您可以避免记录您测试的内容,并保持打开状态,无论您的代码是否适用于早期版本。 0.11可能会或可能不会工作,如果用户想要尝试它(特别是如果他们想要向他们报告他们的经验,或者像维基的某些社区资源),请鼓励它,但不要承诺正式支持它们。

相关问题