公司gitlab 上维护了一些Python内部库,最近出现了一些小毛病,解决的同时借此梳理一下。
¶内部库依赖正确写法
公司最近对gitlab 服务进行升级,由此导致了内部库下载失败。之前在requirements.txt 声明的链接如下:
经排查发现gitlab 版本升级后,链接地址发生了变化,新的地址如下:
了解后发现,其实 pip 就是将 gitlab 仓库的代码以压缩文件的形式下载下来并解压执行setup 生成python 运行环境的依赖库。
这么写还是直接获取tar 包的地址,适配性太差,不知道那天链接又改掉了,那么有什么好的方案吗
其实git 有提供获取依赖库的接口,通过调用以下链接实现依赖库的下载:
¶版本管理
之前公司内部依赖库是拉取某一个分支,倘若采取这种方案会出现以下两个问题:
- 当底层依赖库升级后,上层所有库都需要做适配,否则会出现无法运行的情况
- 当部署否版本回退时,依赖无法回退至上一个版本
因此我们采取以下方案: 基于master 打tag 进行版本控制。当新的特性更新到master ,我们会对其进行打tag,声明版本。 如(v1.0.0),因此我们只需要在
业务库中修改依赖即可,如:
而其他上层库则按需修改,也可以解决上面出现的问题。
¶other
正常情况就没啥问题了,但是本人在测试环境进行部署时,发现情况并不乐观,执行以下命令(-q 控制台详细打印输出):
出现错误: fatal: HTTP request failed
查阅后发现,因为当前机器Centos 版本过低,只有Cento6.5,自带的的git 版本 1.7.1 ,并不支持此格式,因此需要对git 进行升级。
¶升级git
1.安装依赖
1 | sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc |
2.卸载git
1 | sudo yum remove git |
- 下载并安装高版本git
1 | wget https://github.com/git/git/archive/v2.2.1.tar.gz |
4.添加至环境变量
因为是非root用户使用git,则需要配置下该用户下的环境变量:
1 | echo "export PATH=$PATH:/usr/local/git/bin" >> ~/.bashrc |
至此,git 升级完成,可以通过git --version
查看版本
再次执行下载命令,仍旧出现错误,SSL connect error
,只是由于无法在服务器使用curl命令访问https域名,nss版本有点旧了,这该死的老机器😭:
¶更新nss
执行更新nss命令:
1 | yum update -y nss curl libcurl |
又又又出现问题啦😣Cannot find a valid baseurl for repo: base
需要更新yum 的下载源。。。。。。
¶更换yum源
-
备份原yum源
1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
-
下载镜像源
1
2
3阿里云centos7的yum源:http://mirrors.aliyun.com/repo/Centos-7.repo
阿里云centos6的yum源:http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/Centos-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
捣鼓半天发现阿里源不在支持centos6 镜像源了,使用清华的吧。
执行以下命令替换镜像源:
1 | sed -i 's#vault.centos.org#mirrors.tuna.tsinghua.edu.cn/centos-vault#g' /etc/yum.repos.d/CentOS-Base.repo |
3.重新生成缓存
1 | 清除缓存 |
-
更新nss
1
yum update -y nss curl libcurl
-
下载依赖
参考: