You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用python-gitlab打印项目信息并为3000+项目添加进度条?

使用python-gitlab获取GitLab项目信息并添加进度条

实现步骤

1. 安装依赖

需要安装python-gitlab(GitLab API交互库)和tqdm(进度条工具):

pip install python-gitlab tqdm

2. 完整代码实现

以下代码整合了项目信息提取与进度条功能,优化了大量项目场景下的API请求效率:

#!/usr/bin/env python

import gitlab
import os
import sys
from tqdm import tqdm

GITLAB_SERVER = os.environ.get('GL_SERVER', 'https://gitlab.instance.com')
GITLAB_TOKEN = os.environ.get('GL_TOKEN')

if not GITLAB_TOKEN:
    print("请设置GL_TOKEN环境变量。")
    sys.exit(1)

gl = gitlab.Gitlab(GITLAB_SERVER, private_token=GITLAB_TOKEN)

def main():
    # 预加载所有组的所有者信息并缓存,避免重复发起API请求
    print("正在加载组信息...")
    groups = gl.groups.list(get_all=True)
    group_owner_map = {g.id: g.owner.username if g.owner else 'N/A' for g in groups}

    # 获取所有项目,包含统计字段(用于读取存储大小)
    print("正在加载项目列表...")
    projects = gl.projects.list(get_all=True, statistics=True)

    # 打印表头
    print(f"\n{'项目名称':<40} {'项目所有者':<20} {'组所有者':<20} {'大小(MB)':<10}")
    print("-" * 90)

    # 遍历项目,用tqdm生成实时进度条
    for project in tqdm(projects, desc="处理项目中", total=len(projects)):
        # 带命名空间的项目全名(避免重名)
        project_name = project.path_with_namespace
        # 项目所有者用户名
        project_owner = project.owner.username if project.owner else 'N/A'
        # 组所有者信息
        group_owner = 'N/A'
        if project.namespace.kind == 'group':
            group_owner = group_owner_map.get(project.namespace.id, 'N/A')
        elif project.namespace.kind == 'user':
            # 个人项目的组所有者即为命名空间用户
            group_owner = project.namespace.name
        # 存储大小转换为MB(保留两位小数)
        storage_size_mb = round(project.statistics['storage_size'] / (1024 * 1024), 2)

        # 格式化打印项目信息
        print(f"{project_name:<40} {project_owner:<20} {group_owner:<20} {storage_size_mb:<10}")

if __name__ == "__main__":
    main()

关键功能说明

  • 项目信息提取:

    • 项目名称:使用path_with_namespace获取带命名空间的完整名称,避免不同组下的重名项目混淆
    • 项目所有者:直接从项目对象的owner字段提取用户名,无所有者时显示N/A
    • 组所有者:通过预缓存的组信息字典快速查询,避免每个项目都发起组信息请求,提升处理速度
    • 存储大小:将API返回的字节数转换为MB单位,优化可读性
  • 进度条实现:

    • 用tqdm包裹项目列表,desc参数设置进度条提示文本,total参数指定总项目数
    • 进度条会实时显示当前处理进度、已用时间、剩余时间等信息,适配3000+项目的批量处理场景

注意事项

  • 确保GitLab Token拥有read_api权限,以及访问目标项目/组的权限
  • 预缓存组信息可大幅减少API请求次数,避免触发GitLab API限流机制
  • 若项目数量超过10000+,可改用分页遍历方式(通过page和per_page参数),降低内存占用

内容的提问来源于stack exchange,提问作者Vorbisset

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:53:19