大家如何打包 Python 程序的

2017-08-17 18:49:50 +08:00
 ysicing
大家通常如何打包 python 程序的,避免不同环境的差异(Centos/Ubuntu)。

1.Pyinstaller
2.Docker
3.放弃用 Go 重写?
4022 次点击
所在节点    程序员
15 条回复
redapple0204
2017-08-17 18:51:34 +08:00
同平台的 python 程序能有什么差异....
YUX
2017-08-17 18:52:34 +08:00
Docker
dbow
2017-08-17 18:52:42 +08:00
virtualenv + 自己从源代码 build 的 python2.7 , 在线上跟线下都保持一致.
zhangchioulin
2017-08-17 21:25:17 +08:00
第 3 条是乱入吗……
yuanfnadi
2017-08-17 21:33:13 +08:00
docker 大法好
VShawn
2017-08-17 21:42:00 +08:00
4 用汇编重写
janxin
2017-08-17 21:42:18 +08:00
如果是服务器程序,docker
如果是桌面程序,pyinstaller
SuperMild
2017-08-17 22:49:17 +08:00
以后还是转 Go 吧,语言和标准库非常稳定(可以预见 Go 2、Go 3 也很容易向下兼容),打包方便,运行效率高,发展速度也快(第三方库越来越多)。
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 包。
ysicing
2017-08-18 08:25:14 +08:00
@redapple0204 有些包还是存在差异的


@zhangchioulin 不是,主要就是有些依赖的包的差异太蛋疼了,有时候不好排查,然后就有小伙伴提建议用 go 重写

看来大家也是用 docker
XIVN1987
2017-08-18 09:36:56 +08:00
Go 语法那么丑你们都能接受??
nicevar
2017-08-18 09:42:41 +08:00
python 打包确实麻烦,特别是复杂的项目,我记得六七年前某导师带领学生用 python 做了一个航空类的项目,后面打包遇到问题让我去解决,我一看那个打出来的包 500 多 M,引用了一大堆库,真是懵了
用 Go 重写不太现实的,如果不是服务器程序,很多用到的库 Go 连个影子也没有,也没人去写
metaquant
2017-08-18 09:58:54 +08:00
@XIVN1987 我以为就我一个人这么想,哈哈,感觉 go 的语法真是丑,还不如 java
weakish
2017-08-18 11:44:02 +08:00
平台类似的话,仅仅是 pip 包依赖问题, 先尝试 Pipfile.lock, 不行再试其他。
Pyinstaller 一般更多地是解决 cross os 打包发布的问题。
Docker/lxc 则是解决各种 pip 包以外的依赖很复杂的问题。
ysicing
2017-08-18 11:59:35 +08:00
@XIVN1987 @metaquant @nicevar 没用过 Go 哈哈。


@weakish 还是搞 docker 省力

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

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

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

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

© 2021 V2EX