需要python模块的最低版本

需要python模块的最低版本,python,Python,我需要确保其中一个导入的包至少是v1.2.6。我在这里看到的所有问题都是检查Python运行的版本。我想检查模块的版本 我目前的解决方案很混乱。必须有一个pythonic的解决方案 导入Pypopt 版本=Pypopt.\uuuu版本__ 大调,小调,国际热核聚变实验堆=ver.split.” 主修 小调 iter=intiter 如果专业

我需要确保其中一个导入的包至少是v1.2.6。我在这里看到的所有问题都是检查Python运行的版本。我想检查模块的版本

我目前的解决方案很混乱。必须有一个pythonic的解决方案

导入Pypopt 版本=Pypopt.\uuuu版本__ 大调,小调,国际热核聚变实验堆=ver.split.” 主修 小调 iter=intiter 如果专业<1: logger.errormajor版本小于1 如果未成年人<2: logger.errorminor版本小于2 如果iter<6: logger.erroriter版本小于6 可能重复: 虽然在SO上也有类似的问题,但这些都是关于如何从模块中获取和打印结果的问题。我已经在做了

我的问题是,是否有一种干净的、python式的方法来对照最小版本号检查该版本号。例如:

如果Pypopt.\uuuuuu版本<1.2.6: logger.errorVersion过低。使现代化 但是_版本_)返回一个字符串,由于1.2.6中有两个小数,因此无法将其转换为浮点,然后进行比较。目前,我正在将每个数字转换为整数,然后进行比较

没有办法解决这样的混乱是正确的方法。 我用10行来比较两个数字。 您可以使用打包模块。使用pip安装包装进行安装,然后:

从打包导入版本 导入Pypopt 版本=Pypopt.\uuuu版本__ 如果version.parsever 从打包导入版本 导入Pypopt 版本=Pypopt.\uuuu版本__ 如果version.parsever 下面是您在示例中如何要求PypOpt==1.2.6的最低版本:

python -c 'import pkg_resources; pkg_resources.require("pypfopt>=1.2.6")'
我没有安装此软件包,因此我得到:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "python3.8/site-packages/pkg_resources/__init__.py", line 884, in require
    needed = self.resolve(parse_requirements(requirements))
  File "python3.8/site-packages/pkg_resources/__init__.py", line 770, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'pypfopt>=1.2.6' distribution was not found
 and is required by the application
与:

这一次,尽管我的示例中的依赖项不正确,但版本号足够高就足够了,因此脚本可以继续使用pytorch_lightning。我验证了它可以很好地处理其依赖项的较新版本。

pkg_资源,使用setuptools分发,做您需要的事情,并处理包不存在的情况

下面是您在示例中如何要求PypOpt==1.2.6的最低版本:

python -c 'import pkg_resources; pkg_resources.require("pypfopt>=1.2.6")'
我没有安装此软件包,因此我得到:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "python3.8/site-packages/pkg_resources/__init__.py", line 884, in require
    needed = self.resolve(parse_requirements(requirements))
  File "python3.8/site-packages/pkg_resources/__init__.py", line 770, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'pypfopt>=1.2.6' distribution was not found
 and is required by the application
与:


这一次,尽管我的示例中的依赖项不正确,但版本号足够高就足够了,因此脚本可以继续使用pytorch_lightning。我验证了它在其依赖项的较新版本中可以正常工作。

我相信这种事情通常会在安装时处理。你是如何分配模块的?通常我会。我们的大多数机器上都运行了一个较旧的版本,我想确保在他们开始运行脚本之前,他们已经更新到了最新版本,因为我们需要1.2.6版本的bug修复。这是否回答了您的问题@AMC,不完全是。我能够得到版本1.2.6的字符串,但将每个部分转换为int,然后根据最低版本检查它似乎很复杂。似乎有一种我不知道的python方式。我想这就是你想要的:我相信这种事情通常会在安装时处理。你是如何分配模块的?通常我会。我们的大多数机器上都运行了一个较旧的版本,我想确保在他们开始运行脚本之前,他们已经更新到了最新版本,因为我们需要1.2.6版本的bug修复。这是否回答了您的问题@AMC,不完全是。我能够得到版本1.2.6的字符串,但将每个部分转换为int,然后根据最低版本检查它似乎很复杂。似乎有一种我不知道的蟒蛇方式。我想这就是你想要的:
import pkg_resources
from packaging import version
pkg = "pytorch_lightning"
min_ver = "1.0.4"
got_ver = pkg_resources.get_distribution("pytorch_lightning").version
if version.parse(got_ver) < version.parse(min_ver):
    raise pkg_resources.VersionConflict(f"{pkg}>={min_ver} is needed, but found {pkg}=={got_ver}")