博主搞了个项目,需要在线静默更新用户程序文件夹下的一些文件。捣鼓了半天终于搞出来了,特来分享。
工具:python 3.X, GitLab
用到的库:gitlab
注:博主这里的Gitlab是同事在服务器上弄好的,具体怎么在服务器上搭建GitLab,博主也不会…(~ = ▽ = )~,等会上传本书,大家一起学习吧。
第一步:安装python-gitlab包
pip install python-gitlab
第二步:在GitLab网页上生成AccessToken
账户——Settings
左侧Access Tokens,根据要求填写,建议有效期弄长点,Scope勾选 □API,弄完点击create。
然后一定要把生成的Access Token另外存起来!!因为你一旦离开这个界面,就再也看不到了。
第三步:开始码代码
直接上博主的测试代码:
这里注意,下载后初次decode会得到bytes格式的内容,
针对编译过的文件,比如 .pyd, .exe类的文件,直接使用bytes格式配合‘wb’形式写入。
但是对于可编辑的文件,比如 .py 文件需要二次decode,获得str()格式,使用‘w’写入,这样中文才不会乱码。
可以用正则表达式来判断文件后缀名。
博主亲身试验!
# gilab包
import gitlab
class onlineUpdate:
# 初始化
def __init__(self):
# 服务器地址
self.url = 'https://xx.xx.xx.xx'
# 前面生成的Access Token
self.accessToken = 'xxxxxxxx'
# 登录
def login(self):
gl = gitlab.Gitlab(self.url,self.accessToken)
return gl
# 获得项目:projectID的格式随意,反正我就写了个数字进去
def getProject(self,projectID):
gl = self.login()
projects = gl.projects.get(projectID)
return projects
# 获得project下单个文件
def getContent(self):
projects = self.getProject(5)
# 获得文件
f = projects.files.get(file_path='paramRef.cp36-win_amd64.pyd',ref='master')
# 第一次decode获得bytes格式的内容
content = f.decode()
# 第二次decode获得str
# content = content.decode()
# 存到本地
with open('paramRef.cp36-win_amd64.pyd', 'wb') as code:
code.write(content)
# 测试
ou = onlineUpdate()
ou.getContent()
运行后,文件就从Gitlab上下载下来啦。~(=▽=~)
这里为跟博主一样不熟悉Git的人讲解一下:
1. getContent方法里的ref = ‘master’,是指上传文件时的target Branch,一般好像默认都是master?
2. project ID
python-gitlab也是可以根据名字找project的,但是博主尝试了一次失败了?偷懒直接用ID了。
3. 存本地的时候,with open 里的filepath一定要把目录写写清楚,
尤其是文件的后缀名!!!不要写错啦。
比如博主下载的是pyd如果写成了txt或者漏写了,就会GG。
以上代码经过博主亲自测试,请各位放心借鉴。
附上博主的参考文献:
1. gitlab库的官方文档:
https://python-gitlab.readthedocs.io/en/stable/gl_objects/projects.html#reference
2. python gitlab api
https://blog.youkuaiyun.com/u012881331/article/details/82881090
3. Python Gitlab Api 使用
https://blog.youkuaiyun.com/xie_0723/article/details/75215869
4. python操作gitlab API
https://www.jianshu.com/p/615335e40be7
5. 了解GIt的书
优快云上好多,叫progit2