Python 项目移植到其他机器,要求全 Linux 系统适配

2019-04-29 23:31:49 +08:00
 akmonde

RT,领导要求移植某个项目,要求移植到不同的 linux 机器上都能适配。 领导的意思是,python 本来全平台通用,完全能打包到内网无人值守安装,完全无错完成。 我这边本来想的是,用 virtualenv 直接打包,但是发现几个坑,打包好的很多文件里,有些是直接引用的系统软 link:

/home/lab/venv/local/bin

引用的是:

lrwxrwxrwx 1 lab lab   18 Apr 29 07:53 bin -> /home/lab/venv/bin

换到新环境下,要是不存在改文件,或者环境不同换了位置,该如何处理。 领导应该会要求,不能固定在某一个目录,这个我不知道怎么弄。

另外,在安装库文件的过程中,领导要求把库文件弄下来,不能即时下载纠错。 我在安装某一些库文件的过程中,比如:

pip install lxml 
pip install gevent

可能会出现部分报错,其实人工纠正还是不难,但是现在要求全部弄下来打包的话, 如何才能做到完全适配,比如缺啥底层文件,都加到这个文件夹里,做好链接,直接能用,适配全系统 linux。 领导还加了句,实在不行还可以判断下系统内核版本和系统版本再进行加载。

另外,领导附加了要求,不能用镜像虚拟机 docker 之类的。

很僵硬,我这边实在绝望,希望各位大佬能指点下。 在线等,很急,领导催的紧! 感谢!

6503 次点击
所在节点    Python
48 条回复
est
2019-04-29 23:33:21 +08:00
docker 不行可以 runc
akmonde
2019-04-29 23:34:17 +08:00
@est 他的意思是机器可能啥都没装,临时用没时间装,要求直接解压安装就能用。
tomczhen
2019-04-29 23:42:26 +08:00
完全是张口就来——虽然我不知道该怎么做,但是这个问题肯定很简单,简单抽空做一下,明天就要。

就算是跨平台也是有 glibc 之类依赖,适配全系统 Linux 还是得分平台打包才能实现,更何况还有一些依赖库可能是动态编译,还会依赖系统 ssl 库之类的,对版本还有要求。

用 pyinstaller 之类的工具能解决 一部分问题,不过也不是短时间马上就能搞定全系统 Linux 适配。
shuax
2019-04-29 23:45:00 +08:00
virtualenv --relocatable
不知道是不是这个
reus
2019-04-30 00:04:36 +08:00
换 go,禁用 cgo,保证放到哪里都能跑。
wevsty
2019-04-30 00:13:52 +08:00
既然有 docker 这样的东西干嘛不让用,自己造个轮子又麻烦,问题还多。

如果不依赖于任何系统上特殊组件的话,可以通过 chroot,直接打包所有的依赖库,也许能解决问题。
chinesestudio
2019-04-30 00:15:29 +08:00
全平台就搞 docker 镜像吧
Cooky
2019-04-30 00:18:28 +08:00
miniconda,所有依赖库都用 conda 下载的二进制包
Qzier
2019-04-30 00:22:26 +08:00
用 pyenv,连 pyenv 一起复杂,后面只需要改下环境变量。
xiaoheijw
2019-04-30 00:47:15 +08:00
pip download 可以下载全部依赖库
xiaoheijw
2019-04-30 00:48:28 +08:00
@xiaoheijw linux 底层依赖的话,可能你要写个 script 根据平台不同去安装
blless
2019-04-30 01:02:38 +08:00
这要求小工具还是用 go 写过吧 pyinstaller 我当年愣是想打一个 win 包 没打出来
prolic
2019-04-30 01:06:03 +08:00
提供个思路,不知道可行不可行,虚拟环境文件夹打包然后走相对路径,该改的 env 都改掉,这都不行就看看 python 编译配置,没准就支持了
miaoever
2019-04-30 04:43:56 +08:00
可以试试 https://github.com/facebookincubator/xar
我们所有的 python binary 分发部署都使用 xar 格式, 无需依赖系统 Python 环境。
kxjhlele
2019-04-30 05:23:50 +08:00
用 pypy 绿色版试试呢,不清楚你们的包支持不支持
yegle
2019-04-30 05:35:13 +08:00
cnnblike
2019-04-30 06:16:07 +08:00
glibc 依赖不对可以让这个包跪在地上哭(我就这么被一个中老年版本的 linux 系统整哭过,就差没跪在地上求管理员爸爸升级系统了
yanaraika
2019-04-30 06:37:50 +08:00
docker 一步到位。别的 chroot 类解决方案都不成熟
wenzhoou
2019-04-30 06:43:39 +08:00
采用了 docker 方案以后,你的问题就转移成怎么安装和维护 docker 了。
liangzi
2019-04-30 07:57:41 +08:00
@cnnblike 嗯 前天因为跨发行版安装了个带 glibc 的包 系统瞬间就崩了😂

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

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

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

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

© 2021 V2EX