CI 中 自动安装 Python requirement.txt 如何增量安装?

目前 gitlab 配置了 cicd, 监控 requirement.txt ,一旦该文件有变化,就会触发 stage 进行 docker 镜像 build, 这期中有进行 pip install -r requirement.txt 的步骤,requirement.txt 里边有接近 100 个库,但可能此次更新就只添加了 1 到 2 个新库,但 CI 是全量重新 install, 这就意味着每次要安装原有的 100 来个库,再加上新的库, 带来的问题是:

一是会变的非常慢,
二是里边有部分库安装靠运气,时而能成功,时而失败。
想过解决办法:

是先将目前的 100 多个库制作一个新的基础镜像,
但带来的新的问题是:

requirement.txt 始终是全量的,因为下游业务需要也要求这个文件必须是全量的。这样的话,即使基础镜像有固定的 100 来个库,也会重跑 pip install -r requirement.txt 好像并没有解决问题
再者,基础镜像变的非常的庞大且不纯净。
特来请教下 V 友,有什么好的解决方案

txt 镜像 install requirement15 条回复 • 2021-06-25 12:41:22 +08:00
matrix67 1
matrix67 3 小时 13 分钟前 ❤️ 2
一是会变的非常慢,
这个你们需要本地搭建一个源,把上游的全拉下来。

二是里边有部分库安装靠运气,时而能成功,时而失败。
这个需要 pin dependency,装包咋会需要运气,你们可能就梳理出来了一级依赖,需要把所有依赖分析出来,用类似 pip-tools 工具可以解决。
Vegetable 2
Vegetable 3 小时 8 分钟前
pip 不会重新安装已经存在的依赖
Requirement already satisfied: requests in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages (2.25.0)
mekingname 3
mekingname 3 小时 6 分钟前
基础镜像如果有这个库的话,pip install -r requirement.txt 的时候,会自动跳过这个库。实际上还是能够提速的。
Jirajine 4
Jirajine 3 小时 3 分钟前 via Android
用 poetry,带 lock 锁定版本。
abersheeran 5
abersheeran 2 小时 57 分钟前
一楼正解。

另外补充一点,如果部分库靠运气,大概率是需要编译之类的步骤,而不同的安装顺序可能导致有时候依赖有、有些时候没有。建议搭一个私有 PyPi,把所有需要编译的库都自己编译完丢到自己的 PyPi 里,安装的时候能简化不少步骤。
l4ever 6
l4ever 2 小时 45 分钟前
pip 不会重新安装已经存在的依赖, 结帖.
wellsc 7
wellsc 2 小时 35 分钟前

css3 8
css3 2 小时 29 分钟前
@Vegetable
@mekingname
@abersheeran
@l4ever
试了下,有的话,确实检测一遍就跳过了,不存在我说的重装的情况,除了影响基础镜像大小纯净度,暂时可以接受,谢谢各位
css3 9
css3 1 小时 57 分钟前
我其实想请教下各位,CI 里边有没有增量处理的方法,包括但不局限于安装 package 这些,有可能是业务相关,比如读 gitlab,写文件这些耗时较长的操作,按常规来处理,触发了就开始全量重新执行的
debuggerx 10
debuggerx 1 小时 52 分钟前
@css3 配置 volume 吧
https://www.debuggerx.com/2020/12/13/modern-development-workflow-gitlab-ci-cd-1/#%E5%8A%A0%E9%80%9F%E6%9E%84%E5%BB%BA%E9%80%9F%E5%BA%A6

brucedone 11
brucedone 1 小时 47 分钟前
如果 CI 触发的是 docker 镜像构建,你可以考虑将常规的 requirements 和环境打包一个 base 镜像,剩下的就是你当前项目需要用到的增量,下次构建就直接引用这个 base 镜像
matrix67 12
matrix67 1 小时 38 分钟前
@css3 //CI 里边有没有增量处理的方法

楼主这不就是和代码里面增加缓存一个思路,把耗时的东西从网络拉变成本地拉,把需要重复计算的结果先存下来,下次要用的时候直接取。

还有想办法都搞在 docker 镜像里面。小文件很多也很影响时间的,docker 镜像都变成一个大的块了,也能提速不少。
vicalloy 13
vicalloy 1 小时 22 分钟前
让各个项目自己解决。
我都是给每个项目创建一个 base 的镜像,把基础库在 base 镜像里安装好。
正式的镜像基于 base 去做,这样只要安装少数有更新的库就够了。
如果 base 镜像和发布镜像差异过大,就重做一个 base 镜像。
zacharyjia 14
zacharyjia 49 分钟前
我觉得你可能需要的是这个,https://jiacs.com/p/gitlab-ci-pip-cache/,CI 的构建缓存。挺久之前的了,仅供参考,建议按照*新文档配置。
Anonym0u5 15
Anonym0u5 28 分钟前
每次 build 可以 FROM 上一次的构建镜像。

前端大佬们,移动端布局不用 REM 用什么?

刚才看到这个文章 https://zhuanlan.zhihu.com/p/378619948

其中说到 rem 布局,有点疑惑。如果不用 rem 应该如何做自适应?
rem 布局 疑惑 大佬27 条回复 • 2021-06-25 13:02:52 +08:00
murmur 1
murmur 2 小时 28 分钟前 ❤️ 1
没有自适应,不适应,用一些相对布局,能拉开就行

强制做自适应的结果,就是小米主站的横屏手机显示,直接 chrome 选调试工具转一下屏就可以看到效果了
emonc 2
emonc 2 小时 27 分钟前
可以用 vw/vh
关于这个文章,考虑到 V 站不能说脏话我就不予置评了
kop1989 3
kop1989 2 小时 25 分钟前
实用层面上的自适应无非就是宽度匹配。

真正需要横屏、pad 使用的时候,考虑到内容密度的问题,你靠宽度匹配也不合适了。
需要重新规划布局,重新渲染。
wenzichel 4
wenzichel 2 小时 23 分钟前 ❤️ 1
我们现在用的是 vw 和 /vh,配合着 webpack 的插件 postcss-px-to-viewport,可以将源码中的 px 转为 vw 单位。

require(‘postcss-px-to-viewport’)({
viewportWidth: viewportWidth || 750, // 设计稿的宽度
unitPrecision: 3, // 单位精度,即保留几位小数
viewportUnit: ‘vw’ // 转换后的单位
}),
mxT52CRuqR6o5 5
mxT52CRuqR6o5 2 小时 15 分钟前 ❤️ 2
@emonc 把别人带坑里去,自己水平就变相提高了
dagouziwangwang 6
dagouziwangwang 2 小时 8 分钟前
emmm 文章里说 “FaceBook 使用 Tailwind CSS 重构后,节省了接近 70%的 css 代码,威力惊人”,好奇 className 多了多少
Vegetable 7
Vegetable 2 小时 8 分钟前
移动端我的体会是,如果不考虑横屏,vw/vh 很好用。引入横屏会麻烦一点。

这个文章早就看过了,一言难尽…
qaqLjj 8
qaqLjj 2 小时 3 分钟前 via Android
vw 啊
murmur 9
murmur 1 小时 51 分钟前
无论 vw,vh 都有个单位,*忌讳的是设计一个全局变量,妄图通过修改这个变量适配各种屏幕尺寸,而且国产手机的 rom 各种魔改,你不知道在 ui 设定缩放的时候会出现什么奇葩问题

你看各家,有几个适配的,都是选一个*小尺寸,比如横排*小只能 4 个按钮,那更宽就加大间距,竖排因为可以滚动所以几乎必须要考虑,真遇到横屏,两边留白

遇到需要大字体的时候,基本没几个管的,微信是有内置字体调整,其余的你只能祈祷有老年人模式

除非你是对横屏非常依赖的东西,比如视频、游戏、文档编辑预览等

想做自适应,除非你页面简单到一行字一张图,稍微复杂一点需要排版就容易崩

至于折叠屏,你看有几家适配,当然折叠屏也不需要适配,这么大屏幕都可以显示电脑版了
murmur 10
murmur 1 小时 51 分钟前
更正:必须要=》没有必要

Dukewill 11
Dukewill 1 小时 48 分钟前
小白请教下,vw/vh 跟直接用 % 有啥区别
learnshare 12
learnshare 1 小时 47 分钟前
em/rem 仅推荐应用在文本相关的属性中,如:
font-size/line-height/text-indent/word-spacing/letter-spacing/text-shadow 等

禁止在布局相关的属性中使用,如:
width/height/margin/padding 等

根据 root.font-size(rem) 调整布局或整体缩放是错误的做法
px2rem 更是纯粹的自讨苦吃

(小程序 750rpx 也是这种方式,开发 /设计省事了,pixel perfect 没了,更大的屏幕没法适配)
ericls 13
ericls 1 小时 45 分钟前 via iPhone
@Dukewill percent 都是爸爸的宽度
yl20181003 14
yl20181003 1 小时 44 分钟前
@Dukewill #11 百分比是相对父元素的吧,vw/vh 相对视窗大小
KuroNekoFan 15
KuroNekoFan 1 小时 42 分钟前
自适应和相对长度单位是两个问题,自适应应该理解为针对不同特性的设备有不同的 layout
另外,相对长度单位也没必要用 rem,直接上 vw 即可,配合蓝湖的自定义屏幕宽度很方便
learnshare 16
learnshare 1 小时 41 分钟前
总结来说,**缩放** 是 **适配(响应式)** 手段中*不该选择的方式之一
kensoz 17
kensoz 1 小时 39 分钟前
似乎现在 vw/vh 是主流?我这现在还在用 rem
kuxuan 18
kuxuan 1 小时 37 分钟前 via iPhone
各位大佬,有用 vw/vh 做的示例吗,给个看看。
wunonglin 19
wunonglin 1 小时 31 分钟前 ❤️ 1
自适应 !== 缩放
CodingNaux 20
CodingNaux 1 小时 21 分钟前
设计师偷懒只设计移动端界面,然后说适配 ipad,单纯放大,所谓的适应是这种吗?
这种没啥意思。

可以看看 bootstrap 怎么用 rem 的。响应式设计老生常谈了,但国内一般就是放大就所谓的适配,设计师也接受
tinkerer 21
tinkerer 1 小时 4 分钟前
@mxT52CRuqR6o5 哈哈哈哈哈哈,你这个观点的角度很不错
3dwelcome 22
3dwelcome 46 分钟前
这文章本身就是矛盾的。

作者推荐用 Tailwind CSS,可里面 REM 满天飞,我还在 V2 发过贴,专门吐槽过这点。
3dwelcome 23
3dwelcome 42 分钟前
@murmur “想做自适应,除非你页面简单到一行字一张图,稍微复杂一点需要排版就容易崩”

只要不是随心所欲手写 span 外套 div,严格按照布局规范来做(FLEX/GRID/BOOTSTRAP),感觉要崩也难。

我现在复杂布局,都是用代码根据设计稿自动生成,*少保证自适应在视觉上的一致性。

至于美不美观另说。
molvqingtai 24
molvqingtai 29 分钟前 via Android
手写的时候 vw/vm rem 配合着用,现在嘛,当然是 taiwindcss 啦
IvanLi127 25
IvanLi127 27 分钟前 via Android
目前看 大部分用 rem 搞自适应的,都是叫缩放,惨不忍睹。
otakustay 26
otakustay 18 分钟前
这问题你研究再深也无解的,它的根源是设计给的是什么,是响应式还是所有设备长一个样。设计要所有设备一个样,那实现上 rem 就是*佳的,归根到底设计水平太差
lrabbit 27
lrabbit 4 分钟前
@kuxuan https://www.lrabbit.life,基本只有 vw/vh

IOS使用ijkPlayer

前言
*近要做一个视频直播的项目,刚刚进入视频坑,开始自己琢磨AVPlayer,使用起来发现还挺多限制的,虽然当然知道要先把基础打好,相关基础链接:

网络播放器相关
http://blog.csdn.net/Matthew_Fan/article/category/1200896

HLS流媒体开发
http://blog.csdn.net/sdvch/article/details/14047281

HLS 比较全的中文博客
http://blog.csdn.net/Matthew_Fan/article/category/1200896

苹果 iOS 开发文档 (HLS)
https://developer.apple.com/streaming/

正文
但是急于做出一个demo交工,就简略的查了查攻略- -,发现B站的开源项目ijkPlayer是一个很好借鉴的项目,赶紧下下来试试,
链接:https://github.com/Bilibili/ijkplayer
具体怎么编译就不一一细说了,自己参照一下文档,这里我主要针对导入ijkplayer包并且使用做一些简单的说明。

完成github上的步骤之后,我们打开ios文件夹下的IJKMediaPlayer工程,发现他的output是一个framework包,那样就轻松了,

%title插图%num

build&run以后,将framework包复制取出,可以从右侧栏直接查看路径,

%title插图%num
或者直接右键进入路径

%title插图%num

既然已经取出了framework文件,那么我们就将它导入到我们需要的工程里面,当然,前提是你不打算修改里面的东西,你也可以通过建立workplace加上建立依赖关系导入整个工程文件,省的每次修改都要重复导入包。ps:其他ijkplayerdemo上的包也*好一起导入了,不然可能会编译出错

%title插图%num

之后的内容可以参考ijkdemo中的ijkMoviePlayerViewController实现调用播放器,如果你不需要这么多东西也可以直接像我这样简单写:

ViewController
#import <IJKMediaFramework/IJKMediaFramework.h>

@interface ViewController : UIViewController
@property (atomic, strong) NSURL *url;
@property (atomic, retain) id <IJKMediaPlayback> player;
@property (weak, nonatomic) IBOutlet UIView *PlayerView;
@property (weak, nonatomic) IBOutlet UIButton *playButton;

然后就通过初试化一些基本设置就可以播放了:
1、url
2、PlayView
3、notification
4、prepareToPlay

简单把界面上的东西部署一下,url等初始化

self.url = [NSURL URLWithString:@”http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8″];

_player = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.url withOptions:nil];
UIView *playerView = [_player view];
playerView.frame = self.PlayerView.frame;
playerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

[self.PlayerView insertSubview:playerView atIndex:1];
[_player setScalingMode:IJKMPMovieScalingModeAspectFill];
[self installMovieNotificationObservers];

别忘记了这个

[self.player prepareToPlay];
1
*后在你需要的地方调用播放等接口

[self.player play];

IOS开发入门之一——Swift语言基础

很多新人对IOS开发很迷茫,不知道从何下手?看完本系列,你将会觉得IOS入门其实很简单。要学习IOS开发,当然是先学习Swift语言,特别是小白,你连基本的代码都看不懂,后面深入学习就很被动了。

一、开发环境配置

1.  开发IOS首先必须有一台mac(苹果笔记本),使用Window系统的电脑还是回家吧。

2. 苹果应用软件的开发必须使用Xcode软件,包括我们IOS开发(手机应用软件)。Xcode的安装非常简单,使用”App Store”下载然后安装,不懂的自己查询。目前Xcode版本是9.4,对应的Swift版本是4.1,IOS的SDK是11.4。Xcode自带Swift和ISO的SDK,不需要另行安装配置。

做IOS开发目前可使用Object C和Swift两种语言,首选的语言当然是Swift语言,这是趋势而且容易上手。

二、创建项目

本章只是为了让大家更快更好学习Swift语言,所以只需要建一个*简单的Playground工程,其好处是可以快速的编译并查看结果。

1. 首先打开Xcode应用,然后点击图中的红框

%title插图%num

2. 确认左上角是选择了”iOS”和”Blank”,接着点击右下角的“Next”,进入下一界面。

%title插图%num

3. 在”Save As:” 后面输入项目的名称,下面可以选择项目要保存的地方,选完后点击右下角的“Create”按钮,项目就创建成功了。

%title插图%num

弹出如下界面:

%title插图%num

有的人说,我的怎么没有左右或者下面的那几块,可以通过点击右上角那几个按钮来调出来:

%title插图%num

简单介绍一下面板各个块的功能:

1.左侧那块显示的是工程的目录结构;

2.中间上面那个大块就是我们的“编码区”,这个地方就是我们要输入Swift代码的地方;

3.中间下面那块是结果“输出区”,我们下面主要使用的就是中间这两块;

4.右侧这块暂时没有用到,不做解释。

 

开发界面中,中间靠左下的那个蓝色按钮是编译按钮,写完代码后直接点击这个按钮进行编译:

%title插图%num

又有人说了,我的块为什么都是白色的,而你中间的是黑色,这是设置了主题配色(目的是长期编程不伤眼睛),你可以自行查询设置,不过Xcode只能设置编码区的颜色,也是醉了。

三、编写代码

其实创建项目后,中间的“编码区”已经有两行代码:

*行 import 这个关键词是用于导入系统或者第三方库,有各种功能不同功能的库,例如UIKit可以帮我们处理视图。

第二行是定义一个字符串变量,这个后面再说。

下面代码都是写在“编码区”,*好每一行都要亲手用键盘敲一遍,这是熟悉一种编程语言很有效的方式。

1.输出到“结果区”

为了直观,我们先用一行代码在“结果区”输出结果,在“编码区”第三行敲如下代码

print(str)
然后点击蓝色三角形的“编译”按钮。可以看到“输出区”,打印出了一行字。后面都可以通过这种方式,将结果输出到“输出区”

%title插图%num

2.常量和变量

Swift用var关键词来定义变量,用let定义常量

var a=5
let b=6
print(a+b)
“输出区”结果是:11

3.数据类型

let c:Int=70//整型
var d:Float=70//单精度浮点型
let e:Double=70//双精度浮点型
var tt=”this is pen”//字符串类型
4.字符串

let myString=”result is ”
let myInt:Int=94
let myString1=myString+String(myInt)
let myString2=”result is \(myInt)”
print(myString1)
print(myString2)
myString1和myString2输出结果都是:result is 94

myString1中用String(myInt)将Int型数据转换为字符串类型,而myString2中使用\()来将数值类型转换为字符串类型

5.数组类型

var array=[“one”,”two”,”three”,”four”]
var getTwo=array[1];
print(getTwo)
输入结果为:two

6.数据字典

var dictionary=[“oneName”:”I am one value”,”twoName”:”I am two value”]
var getTwoValue=dictionary[“twoName”]
print(getTwoValue)
输出结果是:Optional(“I am two value”)

7.枚举

enum Week{
case 星期一
case 星期二
case 星期三
case 星期四
case 星期五
case 星期六
case 星期日
}
var week:Week
week=Week.星期一
print(week)
输出结果:星期一

 

关于Swift语言知识还很多很多,这里只是个简单的引导入门。关于Swift给两点建议:

1.  建议开始学习Swift语言时,碰到的代码都要亲手用键盘敲一遍。

2. 在学完Swift一些常用的知识后,就要开始在实践中应用,实践中肯定还会碰到Swift问题,这时再回头去学习Swift相关内容。

更多Swift语言资料可以参看下面的链接,建议收藏,以后碰到问题也可以查询:

基础内容

本系列后续会不断更新,有兴趣的同学,可以点击下一节:

IOS开发入门之二——*个App

如何在IOS上玩gba游戏(免越狱)

先贴一张成功运行的图片:

%title插图%num

《牧场物语之矿石镇的伙伴们》是我*早接触的gba游戏,现在虽然各种游戏层出不穷,但是偶尔回忆当初的感觉,也别有一番滋味。

一、下载GBA4IOS
用Safari打开 https://iemulators.com/gba4ios 找到gab4ios,然后根据你的iphone选择合适版本下载安装。

下载成功后记得去设备管理中验证该app。

%title插图%num

二、手机连接电脑
这里需要用到一个iphone与电脑连接的软件,我用的是苹果助手。

找到应用管理,然后找到GBA4IOS这个app。

打开文件位置,然后将下载好的gba文件导入到这个目录下就可以了。

%title插图%num

从手机中打开app,就可以看到了:

%title插图%num

iOS15来了,网友大呼良心,附更新方法

期待已久的iOS15终于来了,我查了一下大家对这个iOS15的评测,也有很多人吐槽,但是吐槽归吐槽,咱们也要看看实际都更新了什么,关于本次更新的内容我只做简单介绍,主要就是告诉大家iOS15来了!

%title插图%num

我来说说变化有哪些,简单的就是FaceTime,这个新版本中可以在视频通话中进行空间音频技术,这个技术比较厉害,反正就是算法给力,听得清楚,但是在大陆用这个的人真不多,还有就是新版的FaceTime支持美颜了,还能分享给朋友,这不做详细介绍。

%title插图%num

在我们通知栏里增加了一个专注功能,这个功能让我想起夕阳下的奔跑,那是我逝去的青春,为什么这么说,因为在那几年没有什么高端机,都是大屏国产机,打开手机来一首 月亮之上,感觉真惬意,言归正传,这个功能就如同情景模式一样,当然是高级版的情景模式。

%title插图%num

相机也带来了一些新的细节,更新到这版本后,我们在拍摄照片时候回自动进行识别文本,我们可以自由选择,是复制还是怎么拨打这个电话,这个功能在大陆真实用,营销的人只需要拍照别人的店铺门头就能获取电话号码可以直接保存等,也不用拍完再回去登记了。

%title插图%num

iOS15中还对钱包进行了更新,支持家庭智能钥匙等,还对天气做了ui调整,以及地图,地图可以呈现出3D效果的,还支持了Safari语音搜索,全新Memoji。还带来了全新的壁纸。

支持的设备

说说支持的设备,之前曝光说iPhone6S不支持更新iOS15,其实信息不实,本次iOS15一样支持iPhone6S以及初代SE。咱们看下图。

%title插图%num

网友大呼苹果良心,7前年的设备依然支持更新iOS15。至于更新方法很简单,只需要在后台发送:体验 即可获取小程序,进入获取描述文件就行,对于更新建议,我当然不建议主力机直接上,大家可以观望一下,或者用备用机更新一下玩玩看,感觉没问题再更新,还有就是更新到这里后想要降级到iOS14需要用到电脑刷机才可以,无视资料的人可以无所谓。

%title插图%num

至于iOS15发烫,续航,我真的不知道,因为我还没更新iOS15,我着急告诉大家iOS15来了,还没更新完呢,不过我也做了功课,有评测人说本次系统挺流畅的。

 

iOS上相见恨晚的6个APP,能让你的iPhone更有逼格!

作为一名果粉(不喜勿喷,习惯了iOS的体验),用了这么多年的iPhone,从iPhone5S、iPhone6S再到iPhoneX,

换了几次手机,有几个非常小众却很好用的APP一直都留下来,一定会让你觉得相见恨晚的,下面一一分享给大家。

1、夸克浏览器

*简主义者必备

用过很多的浏览器,其中集阅读小说、浏览新闻、找素材等实用功能的浏览器有很多,但像小编这样的只需要单纯的搜索功能的浏览器只有夸克了。

iOS上相见恨晚的6个APP,能让你的iPhone更有逼格!

 

2、开眼

每日打开眼界

虽然使用频率并不高,但是闲来无事时打开刷几个视频提高自己的眼界,视频无广告,体验也是非常不错的。

iOS上相见恨晚的6个APP,能让你的iPhone更有逼格!

 

3、随便走

可以玩的导航

特点是打开摄像头可以智能识别热门周边,AR导航带你快速到达目的地。

iOS上相见恨晚的6个APP,能让你的iPhone更有逼格!

 

4、迅捷PDF转换器

文档转换办公好助手

PDF文件转为DOC,TXT,PPT,WORD,JPG,PNG,XLS 等,新年期间转换无限使用哦。

iOS上相见恨晚的6个APP,能让你的iPhone更有逼格!

 

5、网友LOFTER

兴趣牛人社交

在这里选择自己的标签,认识与自己趣味相投的人,还能与各领域的牛人大咖交流做朋友。

iOS上相见恨晚的6个APP,能让你的iPhone更有逼格!

 

6、火柴盒

你自己的小宇宙

*初起源于分享打动人心的事物,而随着有趣的人和事越来越多,这里也成了有趣话题的聚集地。电影、旅行、摄像、美图、等等等等。

iOS上相见恨晚的6个APP,能让你的iPhone更有逼格!

 

你还知道别的能让你的手机更顺手的APP吗?