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 之类的。

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

7137 次点击
所在节点    Python
48 条回复
wangfengmadking
2019-04-30 17:17:02 +08:00
1. 假设所有机器已经有 setup 环境了,那么你直接写一个 setup.py, 所有第三方依赖的源码都放在你项目的子目录里面,这样运行 setpu.py 就可以了;或者你预先编译 whl 文件
2. 如果机器连 setup tools 都没有,那么你还是把你的代码根据平台直接编译成二进制文件;
tt0411
2019-04-30 22:27:38 +08:00
@akmonde 前提部署环境都是 Linux 内核且版本不太低, 剩下的就是堆 lib 和 bin 了, 整个过程本质是把操作系统发行版做的一些事情自己再做一遍, 如果对编译链接有一定理解的话, 难度并没有想象的那么大. 之所以很多人觉得很困难, 可能是现在流行的编程语言把很多有趣的东西封装起来了.
necomancer
2019-05-07 03:13:11 +08:00
直接 miniconda 行不行?实在不行连整个 py 环境都给他……
akmonde
2019-05-07 08:24:49 +08:00
@necomancer 他那边就不让用第三方管理器,说是怕断网的纯净环境呢。
akmonde
2019-05-07 08:26:59 +08:00
@wangfengmadking 非常感谢,我研究下。另外,他那边的意思我得自带 python 环境打包,调相对路径。主要是 whl 也需要系统依赖吧。
akmonde
2019-05-07 08:28:30 +08:00
@tt0411 是,确实难点在这儿,我看了下安装过程中的一些坑,让我去 yum 或者 apt-get 一些包,关键点在于,我无法定位我这报错,到底是缺了什么 lib 和 bin,这是最蛋疼的,所以让我单独去编译链接坑点还是比较多。
akmonde
2019-05-07 08:30:16 +08:00
@xiaoheijw 想着做适配主流,判断下,根据不同的系统去装不同的包,不过领导估计不一定认可,他要求在纯净断网环境也能用上。
necomancer
2019-05-07 15:05:13 +08:00
@akmonde 我是想说你自己用 miniconda 搞一个,连整个 conda 的 python 环境一起给他,只有自己的项目调用那个 python....保证通用。

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

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

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

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

© 2021 V2EX