大家通常如何打包 python 程序的,避免不同环境的差异(Centos/Ubuntu)。
1.Pyinstaller
2.Docker
3.放弃用 Go 重写?
1
redapple0204 2017-08-17 18:51:34 +08:00
同平台的 python 程序能有什么差异....
|
2
YUX 2017-08-17 18:52:34 +08:00
Docker
|
3
dbow 2017-08-17 18:52:42 +08:00
virtualenv + 自己从源代码 build 的 python2.7 , 在线上跟线下都保持一致.
|
4
zhangchioulin 2017-08-17 21:25:17 +08:00 via iPhone
第 3 条是乱入吗……
|
5
yuanfnadi 2017-08-17 21:33:13 +08:00 via iPhone
docker 大法好
|
6
VShawn 2017-08-17 21:42:00 +08:00 via Android
4 用汇编重写
|
7
janxin 2017-08-17 21:42:18 +08:00 1
如果是服务器程序,docker
如果是桌面程序,pyinstaller |
8
SuperMild 2017-08-17 22:49:17 +08:00
以后还是转 Go 吧,语言和标准库非常稳定(可以预见 Go 2、Go 3 也很容易向下兼容),打包方便,运行效率高,发展速度也快(第三方库越来越多)。
|
9
mckelvin 2017-08-17 23:31:07 +08:00
你说的不同发型版本环境的差异,只有含 C/C++ 扩展的 Python package 才有这个顾虑吧?
我个人的最佳实践是,构建环境和线上环境都在 docker 里,但不一定同一个 docker image(比如前者需要构建所需的编译软件、但后者不需要),打包一份 wheel 格式,一份 tar.gz 源代码。然后把打包好的文件上传到内网 pypi 源(用 devpi 搭的)。最后构建线上运行的 docker images 时从 devpi 安装 python 包。 |
10
ysicing OP |
11
XIVN1987 2017-08-18 09:36:56 +08:00
Go 语法那么丑你们都能接受??
|
12
nicevar 2017-08-18 09:42:41 +08:00
python 打包确实麻烦,特别是复杂的项目,我记得六七年前某导师带领学生用 python 做了一个航空类的项目,后面打包遇到问题让我去解决,我一看那个打出来的包 500 多 M,引用了一大堆库,真是懵了
用 Go 重写不太现实的,如果不是服务器程序,很多用到的库 Go 连个影子也没有,也没人去写 |
14
weakish 2017-08-18 11:44:02 +08:00
平台类似的话,仅仅是 pip 包依赖问题, 先尝试 Pipfile.lock, 不行再试其他。
Pyinstaller 一般更多地是解决 cross os 打包发布的问题。 Docker/lxc 则是解决各种 pip 包以外的依赖很复杂的问题。 |