还在手动下载github项目?想要自动化下载github项目?基于python开发项目自动下载模块帮你实现自动下载存储

news2024/9/21 13:24:40

GitHub是一个基于Web的代码托管平台和开发者社区。它允许开发者存储、管理和分享他们的代码,并进行版本控制。开发者可以在GitHub上创建仓库来存储项目代码,并使用Git来跟踪和管理代码的变更历史。GitHub提供了一系列协作工具,如问题追踪、Pull请求(合并请求)、代码审查等,使开发团队能够更好地协同工作、交流和合作开发。此外,GitHub还是一个活跃的开源社区,开发者可以在上面找到各种开源项目、学习新技术、贡献代码或参与讨论。GitHub的用户可以通过浏览其他开发者的项目、关注感兴趣的人、收藏喜欢的仓库等方式来互动和分享。总之,GitHub为开发者提供了一个集代码托管、版本控制和社交互动于一体的平台。

相信所有从事开发的人员来说,github都是一个必不可少的网站,官方地址在这里,如下所示:

 当然了有时候因为各种客观存在的网络因素问题,会出现以下访问不到的情况,如下所示:

 不过没有关系,多刷新几次等等就好了。

我们自己平时在开发过程中经常也会需要到gihub中去查资料,很多项目甚至是已经不错的模板了可以直击拿来使用了,而且github里面也开源了很多底层基础框架类的项目,对于整体技术的推动和发展还是很友好的了,对于新手入门学习也是非常不错的资源库了。

平时我们查询自己想要的项目大都是手动进行下载的,这里本文的主要目的就是开发构建项目自动下载模块,来实现项目资源数据的自动化下载存储。

这里我们以清华大学开源的chatGLM-6B项目为例,官方项目地址在这里,如下所示:

 常用的手动下载的方式有两种:

【第一种】

使用git命令行来进行下载,如下所示:

 执行下述命令:

git clone https://github.com/THUDM/ChatGLM-6B

静静等待就可以了,不过经常因为网络等问题会导致下载失败,需要多尝试几次。

【第二种】

直接在项目页面端手动点击操作下载即可,如下所示:

 实测,这种方式下载更便捷一点,且成功率更高一点。

这两种方式本质上来讲都是基于手动点击操作实现的项目数据下载。

接下来我们来看下如何实现自动项目数据下载与本地存储。最简单的实现方式就是借助于第三方目标git就可以直接实现了,代码实现如下所示:

#!usr/bin/env python
# encoding:utf-8
from __future__ import division



"""
功能: GitHub项目资源数据自动化下载存储
"""



import os
from git import Repo



def download_github_project(repository_url, local_directory):
    # 克隆GitHub项目到本地目录
    Repo.clone_from(repository_url, local_directory)



# 项目链接
github_url = "https://github.com/THUDM/ChatGLM-6B"
repository = github_url.split("/")[-1].strip()
# 本地目录
localDir = "projects/"
saveDir = localDir + repository + "/"
if not os.path.exists(saveDir):
    os.makedirs(saveDir)
# 下载GitHub项目到本地目录
download_github_project(github_url, saveDir)


接下来我们看下对应的项目资源数据,如下所示:

 可以看到:这是基于自动化下载代码实现的项目下载截图。

前面都说了这是最简单的实现方式,那么自然还会有其他的实现方式,一般网络数据请求下载相关的我们都会经常使用到requests模块, 这里同样也是可以基于requests模块来实现项目资源数据下载的。

核心代码实现如下所示:

def downloadGithubProject(repository_url, local_directory):
    """
    自动化实现GitHub项目资源的下载与本地存储
    repository_url:GitHub项目链接
    local_directory:本地存储目录
    """
    url_parts = repository_url.split("/")
    username = url_parts[-2]
    repository = url_parts[-1].split(".")[0]
    print("repository: ", repository)
    # 构建API请求URL来获取zip文件
    api_url = f"https://api.github.com/repos/{username}/{repository}/zipball"
    # 发送GET请求以获取zip文件内容
    response = requests.get(api_url)
    # 检查响应状态码是否为200 (成功)
    if response.status_code == 200:
        # 保存zip文件到本地
        zip_path = f"{local_directory}/{repository}.zip"
        print("zip_path: ", zip_path)
        with open(zip_path, "wb") as file:
            file.write(response.content)
        # 解压缩zip文件到指定的本地目录
        with zipfile.ZipFile(zip_path, "r") as zip_ref:
            zip_ref.extractall(local_directory)
        # extractZip(zip_path, local_dir+"/"+repository)
        # 删除下载的zip文件
        os.remove(zip_path)
        # 重命名
        dir_name = None
        dir_list = os.listdir(local_directory)
        for one_dir in dir_list:
            if repository in one_dir:
                dir_name = one_dir
                break
        renameDirectory(
            local_dir + "/" + dir_name, local_dir + "/" + repository_url.split("/")[-1]
        )
        print("项目下载完成!")
    else:
        print("无法下载项目。请检查链接或网络连接。")

同样看下结果数据,如下所示:

 还是很方便地了,后面如果配置web服务接口的形式开发一个后端服务模块的话就可以通过简单的请求数据发送的形式就可以实现自动项目数据的下载处理了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一波三折|药学博士终获CSC资助赴瑞典隆德大学从事2年博士后研究

我们先为W博士获得美国哈佛大学布列根和妇女医院的邀请函,助其成功获得CSC公派资助,但后被哈佛大学国际中心以可能拒签为由,不予办理DS-2019表格。幸亏我们未雨绸缪先期又申请到瑞典隆德大学的2年博士后邀请函,最终顺利得到CSC改派…

CAS + 自旋 锁底层

多线程安全问题 为什么会出现多线程安全问题? 在多线程并发下, 假设有 A,B 两个线程同时操作 count 0 这个公共变量, 在A线程中count, 在B线程中count, 正常来说结果应该是 count 2, 可是同时在A, B两个线程中拿到 count 0 , 并且都执行count赋值, 结果就变成了 count 1…

【Java可执行命令】(十一)Java 密钥库和证书管理工具keytool:玩转密钥库和证书管理,深入解析keytool工具的应用与技巧~

Java可执行命令之keytool 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 生成证书请求:keytool -certreq3.3 导出证书:keytool -exportcert3.4 生成密钥对:keytool -genkeypair3.5 导入证书或证书链:keytool -importcert3…

基于STM32的直流电机调速系统

目录 基于STM32的直流电机调速系统一、原理图二、部分代码三、视频演示 基于STM32的直流电机调速系统 功能: 1.通过LCD屏幕显示实时两个电机的占空比 2.通过按键调整电机1和2的加减速 3.通过L298N驱动两个直流电机完成调速 一、原理图 二、部分代码 #include &qu…

基于Spring Boot + Vue社区管理系统的设计与实现

1、项目介绍 Spring Boot 是一个用于构建 Java 应用程序的开源框架,它使得开发者可以轻松地创建独立的、生产级别的 Spring 应用程序。Vue.js 是一个流行的 JavaScript 框架,用于构建现代化的、响应式的社区管理系统是一个用于管理社区活动、用户信息和…

Vue发布新版本,强制更新代码的方式

public下新建version.json文件定义版本 {"version":"1.1.0" } util下新建updateVersion.js import axios from axios; import { Loading } from element-ui; var t1; var t2; export async function isNewVersion() {var randomNumberMath.random() co…

[软件工具]左键连发工具左键连点工具使用教程

左键连发软件是一个可以点击一下自动左键连续点击指定次数的软件,比如你设置20次,当你点击一次松开鼠标后,会自动左键连续点击20次。具体使用教程为,我们打开软件 我们可以设置连发次数,默认15次,你可以设置…

Zabbix如何对接Prometheus

一、简介 云原生和容器广泛流行打破传统的技术堡垒,现在Prometheus监控得到越来越多企业应用和探索。对于已经存在Zabbix监控系统的用户又想尝试Prometheus而言,在Zabbix4.2版本及5.0 LTS版本正式发布增加了对Prometheus数据源的接入,后续都…

人机环境系统中的一多分有问题探讨

在一般的事物中,一多关系通常指的是一个事物与多个其他事物之间的关系。一多关系可以带来更多的选择和多样性,使事物更加丰富多样。不同的事物之间相互影响和交融,可以产生新的创意和发展机会;不同事物之间的各种关系需要平衡各自…

leetcode 203.移除链表元素

⭐️ 题目描述 🌟 leetcode链接:移除链表元素 1️⃣ 代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*//*思路1:遍历链表,同时用另一个指针记录当…

IDA c++分析辅助插件ida_medigate使用记录

1.下载插件 IDA_medigate 2.将medigate_cpp_plugin.py放到 ida的plugin文件夹中 plugins/ida-referee/referee.py 放置到plugin中 3.将下载的 ida_medigate 放到IDA 内置的python38的Lib\site-packages\目录下 如:D:\IDA_Pro_7.7\python38\Lib\site-packages4.配置插件搜索…

大厂面试官:软件测试员,你的简历,是如何石沉大海的?

引言 俗话说:知己知彼百战百胜,面试如打仗,不是面试官赢,就是求职者胜。站在面试官的维度来跟求职者聊天,让求职者知道面试官的心理。 因为我本身作为一面多年的大厂面试官,相对来说还是有一些面试经验&am…

股价在5年内暴涨了3000%后,Enphase Energy未来还会继续上涨吗?

来源:猛兽财经 作者:猛兽财经 Enphase Energy股票的关键指标 最近很多人都在关注Enphase Energy(ENPH)的关键指标,包括该公司第二季度的指引和最近的股价调整。 2023年4月25日收盘后,Enphase Energy公布了…

leetcode每日一题——80.删除有序数组中的重复项II(面试经典150题)

一、题目描述与要求 80. 删除有序数组中的重复项 II - 力扣(LeetCode) 题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用…

NodeJS安装教程(详细)

系列文章 MySQL安装教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265 …

Linux 内核源代码情景分析(一)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理 Linux 内核源代码情景分析(一) 文章目录 系列文章目录一、存储管理1、外部设备存储空间的地址映射(1&#xff…

LinK3D论文详解

摘要 特征提取和匹配是许多计算机视觉任务的基本部分,例如二维或三维物体检测、识别和配准。众所周知,二维特征提取和匹配已经取得了很大的成功。遗憾的是,在3D领域,由于描述能力差和效率低,目前的方法无法支持3D激光雷…

uniapp在微信开放平台创建移动应用时,如何生成应用签名的问题

包名在打包的时候是必填项,就不多赘述了… 微信开放平台获取应用签名, 场景: 首先需要在手机或者模拟器上下载签名生成工具,下载地址:下载签名生成工具 然后手机打开, 在这里输入你的app打包时的包名&…

【雕爷学编程】Arduino动手做(148)---MD-PS002压力传感器模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

[解决方案] 在linux运行python代码报错(Illegal instruction (core dumped))

PVE修改CPU类型 在运行Python代码时遇到"Illegal instruction (core dumped)"错误时,意味着你的代码尝试在当前CPU架构不支持的指令上运行 1. 利用lscpu命令查看宿机和虚拟机CPU架构,确定宿机和虚拟机是否支持avx指令集 可以发现宿机是支持avx…