学习最佳实践G4F中的编程技术:获得python项目的当前安装版本

ops/2024/10/19 11:57:12/

获得当前python软件包版本

用importlib获取软件版本

from importlib.metadata import version as get_package_version, PackageNotFoundError
PACKAGE_NAME = "g4f"try:x = get_package_version(PACKAGE_NAME)
except PackageNotFoundError:pass

如果没有安装g4f,可以使用其它软件包来测试,比如pip

from importlib.metadata import version as get_package_version, PackageNotFoundError
PACKAGE_NAME = "pip"try:x = get_package_version(PACKAGE_NAME)
except PackageNotFoundError:pass# '21.2.4'

从环境变量中拿软件版本

如果get_package_version没有拿到版本,那么就从环境变量中拿:
from os import environ
version = environ.get("G4F_VERSION")

但是如果软件没有向环境变量中写入类似G4F_VERSION这样的变量,就无法拿到了。

从github repo中拿软件版本

如果以上两种方法都无法拿到软件版本,而软件是通过github获取存放在特定目录,那么就可以到该目录,获取github repo中的软件版本。

Read from git repository代码:

try:command = ["git", "describe", "--tags", "--abbrev=0"]return check_output(command, text=True, stderr=PIPE).strip()except CalledProcessError:pass

check_output是在subprocess里定义的:
def check_output(*popenargs, timeout=None, **kwargs):

check_output中使用了run指令,run指令也是subprocess里面定义的。
def run(*popenargs,
input=None, capture_output=False, timeout=None, check=False, **kwargs):

比如我们到gpt4free的repo目录里,执行:

cd gpt4free/
xxxx@x250:~/github/gpt4free % python
Python 3.9.18 (main, Nov  9 2023, 01:19:38) 
[Clang 14.0.5 (https://github.com/llvm/llvm-project.git llvmorg-14.0.5-0-gc1238 on freebsd13
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import check_output, CalledProcessError, PIPE
>>> command = ["git", "describe", "--tags", "--abbrev=0"]
>>> x = check_output(command, text=True, stderr=PIPE).strip()
>>> x
'0.2.9.5'


http://www.ppmy.cn/ops/117473.html

相关文章

react的组件的概念和使用

文章目录 1. **组件的定义****函数组件****类组件** 2. **组件的生命周期**3. **状态管理****类组件中的状态管理****函数组件中的状态管理** 4. **组件之间的通信****通过 Props 传递数据****上下文(Context)** 5. **组件的样式**6. **处理表单**7. **错…

11. Map和Set

一、二叉搜索树 1. 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根…

【RabbitMQ】消息堆积、推拉模式

消息堆积 原因 消息堆积是指在消息队列中,待处理的消息数量超过了消费者处理能力,导致消息在队列中不断堆积的现象。通常有以下几种原因: 消息生产过快:在高流量或者高负载的情况下,生产者以极高的速率发送消息&…

【Java】异常处理 —— Throwable 及其应用

通过一张图来展示Throwable类的继承体系,如图2所示。 图2 Throwable异常体系结构图 ● Error类称为错误类,它表示Java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的,例如…

关于JDK的选择问题

虽然TongWeb本身支持Open JDK、Oracle JDK、TongJDK、毕昇JDK等,但在商用项目上使用时,需要注意Oracle JDK的商业授权问题。目前部分Oracle JDK版本用于商业是收费的,版本如下: Oracle JDK 8之前版本,全免费。 Oracl…

node-red-L3-重启指定端口的 node-red

重启指定端口 目的步骤查找正在运行的Node.js服务的进程ID(PID):停止Node.js服务:启动Node.js服务: 目的 重启指定端口的 node-red 步骤 在Linux系统中,如果你想要重启一个正在运行的Node.js服务&#x…

Linux本地服务器搭建开源监控服务Uptime Kuma与远程监控实战教程

文章目录 前言**主要功能**一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务,如何安装Docker详见: 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址…

【算法——二分查找】

理论基础: 程序员面试经典题,二分搜索一个区间,区间查找 (LeetCode 34)_哔哩哔哩_bilibili 手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili 这个是红蓝法,很牛…