关于 Python 环境可复现性请教

25 天前
 xgq89757
公司 toB 项目 python 三方依赖有 150+,有没有比较优雅的方式能严格按照 requirements.txt (可能存在版本冲突)复现依赖环境,pip install -r requirements.txt 有个问题就是没准过段时间构建出来的环境就和 requirements.txt 中的不一致了

目前的做法是将环境做成了基础镜像,每次交付都基于这个镜像打包。不同版本有增量依赖或版本调整时在 Dockerfile 中单独 pip install ,但这也存在基础镜像管理和基础镜像复现的问题。
3242 次点击
所在节点    Python
57 条回复
zhoudaiyu
25 天前
直接 docker 不就完事了
jasonchen168
24 天前
我也遇到了,头大。而且 Mac 和 Windows 还有些库不一样
clemente
24 天前
pip install -r requirements.txt --target /home/local_env


下载好 然后上报保存

下次指定 pythonpath 到这个目录就好
clemente
24 天前
@momocraft

1. 有些包 是 现场编译的 没有预编译 的情况
2. 有些包 指定的依赖 他没有指定版本. 时间久了就会出依赖冲突
irory
24 天前
pip 安装可以离线包的,所有依赖都下载本地目录。
tomczhen
24 天前
不涉及编译安装的话还是好解决的,如果想规避这个问题,以我目前的看法是只能选择提供编译好的二进制仓库源才行,这样就只剩下 conda 可以选了。考虑到商用的话,这个问题确实没那么容易。
xgq89757
24 天前
@Mithril 我们确实没这么严格的流程,但是很赞,mark 。
moudy
24 天前
@blackshadow 如果出现要打安全性补丁就完蛋了
sazima
24 天前
使用 pip download 把包下载下来
xgq89757
24 天前
还有种方式就是用脚本去逐个安装 requirements.txt 中的库了,绕过-r 的冲突检查。冲突的库单独装只会有 warnning ,但不会终止安装,最后再扫一遍版本。
BingoW
24 天前
我记得 pip 是有一个原生的方法的,直接将你本地环境所有依赖达成一个大的 zip 包,然后在目标服务器直接安装就好了,目标服务器不需要联网,所有版本都跟本地服务器一致。
xgq89757
24 天前
@BingoW 之前公司内网的开发、测试、试用环境就是类似方法,直接压缩 miniforge 的 env 下对应工程的虚拟环境进行迁移。后来让我全部改成容器化部署了,省去了很多工作量。测试基于镜像测试,交付时直接交付镜像文件。
xgq89757
24 天前
@moudy 目前是基于基础镜像在工程的 Dockerfile 中打补丁。
BingoW
24 天前
@xgq89757 嗯 这个是很好的办法
SunDoge
24 天前
@xgq89757 #8 大部分算法库都提供了预编译二进制包,用 uv 很少会出现不友好的地方。pypi 的 python 库比 conda 、conda-forge 还是多的,用 pixi 会遇到部分依赖在 pypi ,部分依赖在 conda 的问题,解决依赖冲突会比较麻烦。
misoomang
24 天前
即使 requirment.txt 的包指定了版本,每个包对应支持的 Python 版本的范围会不一样,如果传统部署的 Python 版本不固定,即使指定了 pip 包的版本,在不同的 Python 版本下安装也会出现差异
Hopetree
24 天前
如果是容器肯定是搞成基础镜像是最优解啊,特别是机器学习应该会设计到一些需要编译使用的第三方库,这种库的安装不仅仅是 pip 能解决的,还跟服务器环境有关,很难保证依赖顺利安装,所以基础镜像就可以忽略这些问题
h404bi
24 天前
我看你说在用 pixi 了,那有试过用 pixi-pack 直接打包环境么?

https://github.com/Quantco/pixi-pack
SmiteChow
24 天前
十年前的工程实践是把所有包下载下来放到 git 里面去,现在依然是这样,没办法。
lovepocky
24 天前
poetry

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1152582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX