python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python获取版本信息

python获取版本信息的方法与第三方库总结

作者:呆萌的代Ma

这篇文章主要为大家详细介绍了python获取版本信息的方法与第三方库,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下

运行如下代码即可:

print(get_python_base_version())
print(get_python_site_packages())

当前版本信息

获取当前的版本信息如下:

def get_python_base_version():
    """获取python版本信息"""
    version_dict = {
        "Python版本": sys.version,
        "Python解释器路径": sys.executable,
        "版本详细信息": sys.version_info,
    }
    return version_dict

获取所有第三方库

获取全部的第三方库:

def get_python_site_packages():
    # 查看Python的包搜索路径
    logger.debug("Python包搜索路径:")
    _packet_path: dict = {"第三方库": {}, '搜索路径': sys.path}
    try:
        # 获取所有已安装的包
        distributions = list(importlib.metadata.distributions())
        distributions.sort(key=lambda dist: dist.metadata["Name"].lower() if dist.metadata["Name"] else "")
        # 获取site-packages路径
        site_packages_paths = []
        try:
            site_packages_paths = site.getsitepackages()
        except:
            site_packages_paths = [p for p in sys.path if 'site-packages' in p]

        user_site_packages = site.getusersitepackages()
        all_third_party_paths = site_packages_paths + [user_site_packages]

        displayed_packages = set()  # 避免重复显示

        for dist in distributions:
            package_name = dist.metadata["Name"]
            if not package_name or package_name in displayed_packages:
                continue

            displayed_packages.add(package_name)
            # 直接检查dist的路径属性
            dist_location = None
            try:
                # 对于某些版本的importlib.metadata,可以直接获取路径
                if hasattr(dist, '_path'):
                    dist_location = str(dist._path.parent)
            except:
                pass
            # 如果无法直接获取,尝试通过文件推断
            if not dist_location and dist.files:
                for file in dist.files:
                    if file.parent:
                        file_path = str(file.parent)
                        for third_party_path in all_third_party_paths:
                            if third_party_path in file_path:
                                dist_location = third_party_path
                                break
                    if dist_location:
                        break
            # 如果在第三方包路径中,则显示
            if dist_location and any(tp_path in dist_location for tp_path in all_third_party_paths):
                _packet_path["第三方库"][package_name] = dist_location
    except Exception as e:
        logger.error(f"获取包信息时出错: {e}")
    return _packet_path

方法补充

使用sys.version_info获取结构化版本信息

sys.version_info 返回一个命名元组( sys.versioninfo ),其中包含主版本号、次版本号、微版本号、发布状态和构建序号。该元组可以通过索引或命名属性访问。

示例代码:

import sys
 
print(sys.version_info)

输出示例:

sys.version_info(major=3, minor=11, micro=4, releaselevel='final', serial=0)

逐行解释与参数说明:

由于 sys.version_info 是结构化的数据,因此非常适合用于版本比较、条件判断等逻辑处理。

使用sys.version获取完整版本字符串

sys.version 返回一个字符串,表示当前 Python 解释器的完整版本信息。其内容通常包括:

示例代码:

import sys
 
print(sys.version)

输出示例:

3.11.4 (tags/v3.11.4:d2340ef, Jun  6 2023, 20:54:21) [MSC v.1934 64 bit (AMD64)]

逐行解释与参数说明:

此输出包含了详细的版本信息,适合用于调试、日志记录等场景。但因为是字符串格式,不适合用于版本比较或条件判断。

到此这篇关于python获取版本信息的方法与第三方库总结的文章就介绍到这了,更多相关python获取版本信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文