Python库检查是否正确安装并安装所需版本

在Python中使用代码来获取当前环境中指定库的版本,若不能获取或该版本低于所需版本,则自动安装所需版本。思路来自于YOLOv5源码。

下面以'gitpython'库为例子,该段代码配合requirements.txt食用更佳!

from importlib import metadata
import subprocess

pkg_name = 'gitpython'
pkg_version = '3.1.43'

try:
    assert metadata.version(pkg_name) >= pkg_version  # 判断环境中指定库的版本是否≥指定版本
    print(f"'{pkg_name}'已正确安装!")
except (AssertionError, metadata.PackageNotFoundError):
    print(f"'{pkg_name}'不存在或版本低于'{pkg_version}',开始自动下载...\n")

    # 调用shell执行命令'conda install'并在用户交互时自动输入'y'确认安装
    out = subprocess.check_output(f"conda install {pkg_name}", input=b'y', shell=True).decode()

    print(out)

第一次的输出为

>> 'gitpython'不存在或版本低于'3.1.43',开始自动下载...

Channels:
 - conda-forge
Platform: osx-64
Collecting package metadata (repodata.json): ...working... done
Solving environment: ...working... done

## Package Plan ##

  environment location: /opt/miniforge3/envs/test

  added / updated specs:
    - gitpython


The following NEW packages will be INSTALLED:

  gitdb              conda-forge/noarch::gitdb-4.0.11-pyhd8ed1ab_0 
  gitpython          conda-forge/noarch::gitpython-3.1.43-pyhd8ed1ab_0 
  smmap              conda-forge/noarch::smmap-5.0.0-pyhd8ed1ab_0 
  typing_extensions  conda-forge/noarch::typing_extensions-4.11.0-pyha770c72_0 


Proceed ([y]/n)? 

Downloading and Extracting Packages: ...working... done
Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done

可以看到输出和正常使用conda命令安装库一致,并且程序为我们自动输入了'y',再次运行的输出为

>> 'gitpython'已正确安装!
posted @ 2024-04-17 18:15  絵守辛玥  阅读(49)  评论(0编辑  收藏  举报