Python 有什么打包工具可以把依赖都打包进去

2019-12-21 15:51:03 +08:00
 lihongjie0209

Java 有 fatjar js 有 webpack

Python 有什么工具可以把需要的依赖都打包到一起, 用户可以直接使用的, 不需要再手动安装依赖。

最好是生产级别的, 小工具就算了。

如果没有, 那么 Python 社区基于什么样的想法没有实现这个呢?

9779 次点击
所在节点    程序员
36 条回复
jeffersonpig
2019-12-21 15:54:48 +08:00
pyinstaller?
ClericPy
2019-12-21 15:57:11 +08:00
shiv?
lihongjie0209
2019-12-21 15:58:00 +08:00
@jeffersonpig #1
听说过, 但是应该不属于生产级别的工具吧, 没见过很多项目在用
webpack 和 fatjar 应该说是一般项目的标配了
zjsxwc
2019-12-21 16:00:13 +08:00
python 打包成一个 exe 类似的可执行文件?
lihongjie0209
2019-12-21 16:01:04 +08:00
@ClericPy #2 我研究一下, 看了一下 readme, 貌似 C 扩展的包会有问题
lihongjie0209
2019-12-21 16:01:46 +08:00
@zjsxwc #4 不是, 是把所有的依赖都打包到 ./lib 下面
CallMeReznov
2019-12-21 16:08:28 +08:00
pyinstaller 之前处理那种多重引用也会报错,不过有人说可以把需要的包复制到目录下编译.
我也是听说,木有尝试过
JasonEWNL
2019-12-21 16:36:01 +08:00
翻译一下就是 “用户只要拿到代码就能跑”?如果是这个意思可以考虑直接使用 venv,会直接创建依赖的 bin 和 lib。(而且有个好处就是用户能一直用你配置的依赖库版本,防止自带的库版本不一致产生的各种售后问题。)
gwy15
2019-12-21 16:49:11 +08:00
pex / shiv / xar
这几个都差不多,我用的是 pex。

pex 实现原理是,python 支持把代码放到一个 zip 文件里面,直接执行 zip 文件。所以把第三方依赖和你的源代码打包进去,声明入口就可以直接跑这个 pex 文件。当然使用的解释器还是你的系统级别的。所以 pex 文件比较小,不需要包含解释器(像 venv 之类的解决方法)。

对于涉及到 C 的库,我个人使用到的都是纯 py 的库,没有用到 C 结合的,不过应该也是支持的,只能你找找相关帖子了。
niubee1
2019-12-21 16:52:14 +08:00
涉及 C 的库几乎都会有问题,因为编译目标毕竟是不一样的,都会需要重新编译的过程
gwy15
2019-12-21 16:56:24 +08:00
另外 pex 存在一定的问题是,资源文件( templates, static, etc.) 打包到 pex 里面是不识别的,需要独立出来。

要分发面向用户的话,pex 因为需要用户自己装解释器,所以最好的方法还是用 pyinstaller 直接打包成二进制文件
zero469
2019-12-21 17:14:12 +08:00
蹲点同求
sunwei0325
2019-12-21 17:18:37 +08:00
pyinstaller, 都 6k 多个 star 了, 放心用吧
tt67wq
2019-12-21 17:22:05 +08:00
还是直接 docker 吧
Jero
2019-12-21 17:29:37 +08:00
客户端程序或工具,可以考虑 pyinstaller
masker0817
2019-12-21 18:02:29 +08:00
Docker
Marsss
2019-12-21 18:15:56 +08:00
如果在一开始考虑到这个问题,然后直接用 python 自带的 venv 就不存在这个问题了。虚拟环境中的 site-packages 只有项目所用到的包,没有多余的东西,直接把这个环境拷贝给用户就行了。
建议新建一个 venv,安装一遍依赖。python 自带,还是用原来的 pip 安装依赖,切换个国内源,很香的。
blless
2019-12-21 18:31:17 +08:00
🙄我之前就是想写个小工具给没有程序基础的朋友用,一轮工具试过去都还不行,干脆用 go 重写了一遍
wangyzj
2019-12-21 20:13:15 +08:00
pyinstaller
lihongjie0209
2019-12-21 20:47:28 +08:00
@tt67wq #14 你想让我的用户(不会依赖管理的)安装 docker ?

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

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

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

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

© 2021 V2EX