如何用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
相关产品推荐
相关产品推荐

