Java 有 fatjar js 有 webpack
Python 有什么工具可以把需要的依赖都打包到一起, 用户可以直接使用的, 不需要再手动安装依赖。
最好是生产级别的, 小工具就算了。
如果没有, 那么 Python 社区基于什么样的想法没有实现这个呢?
1
jeffersonpig 2019-12-21 15:54:48 +08:00
pyinstaller?
|
2
ClericPy 2019-12-21 15:57:11 +08:00
shiv?
|
3
lihongjie0209 OP |
4
zjsxwc 2019-12-21 16:00:13 +08:00
python 打包成一个 exe 类似的可执行文件?
|
5
lihongjie0209 OP @ClericPy #2 我研究一下, 看了一下 readme, 貌似 C 扩展的包会有问题
|
6
lihongjie0209 OP @zjsxwc #4 不是, 是把所有的依赖都打包到 ./lib 下面
|
7
CallMeReznov 2019-12-21 16:08:28 +08:00
pyinstaller 之前处理那种多重引用也会报错,不过有人说可以把需要的包复制到目录下编译.
我也是听说,木有尝试过 |
8
JasonEWNL 2019-12-21 16:36:01 +08:00 via iPad
翻译一下就是 “用户只要拿到代码就能跑”?如果是这个意思可以考虑直接使用 venv,会直接创建依赖的 bin 和 lib。(而且有个好处就是用户能一直用你配置的依赖库版本,防止自带的库版本不一致产生的各种售后问题。)
|
9
gwy15 2019-12-21 16:49:11 +08:00 1
pex / shiv / xar
这几个都差不多,我用的是 pex。 pex 实现原理是,python 支持把代码放到一个 zip 文件里面,直接执行 zip 文件。所以把第三方依赖和你的源代码打包进去,声明入口就可以直接跑这个 pex 文件。当然使用的解释器还是你的系统级别的。所以 pex 文件比较小,不需要包含解释器(像 venv 之类的解决方法)。 对于涉及到 C 的库,我个人使用到的都是纯 py 的库,没有用到 C 结合的,不过应该也是支持的,只能你找找相关帖子了。 |
10
niubee1 2019-12-21 16:52:14 +08:00
涉及 C 的库几乎都会有问题,因为编译目标毕竟是不一样的,都会需要重新编译的过程
|
11
gwy15 2019-12-21 16:56:24 +08:00
另外 pex 存在一定的问题是,资源文件( templates, static, etc.) 打包到 pex 里面是不识别的,需要独立出来。
要分发面向用户的话,pex 因为需要用户自己装解释器,所以最好的方法还是用 pyinstaller 直接打包成二进制文件 |
12
zero469 2019-12-21 17:14:12 +08:00
蹲点同求
|
13
sunwei0325 2019-12-21 17:18:37 +08:00
pyinstaller, 都 6k 多个 star 了, 放心用吧
|
14
tt67wq 2019-12-21 17:22:05 +08:00
还是直接 docker 吧
|
15
Jero 2019-12-21 17:29:37 +08:00
客户端程序或工具,可以考虑 pyinstaller
|
16
masker0817 2019-12-21 18:02:29 +08:00 via Android
Docker
|
17
Marsss 2019-12-21 18:15:56 +08:00
如果在一开始考虑到这个问题,然后直接用 python 自带的 venv 就不存在这个问题了。虚拟环境中的 site-packages 只有项目所用到的包,没有多余的东西,直接把这个环境拷贝给用户就行了。
建议新建一个 venv,安装一遍依赖。python 自带,还是用原来的 pip 安装依赖,切换个国内源,很香的。 |
18
blless 2019-12-21 18:31:17 +08:00 via Android
🙄我之前就是想写个小工具给没有程序基础的朋友用,一轮工具试过去都还不行,干脆用 go 重写了一遍
|
19
wangyzj 2019-12-21 20:13:15 +08:00
pyinstaller
|
20
lihongjie0209 OP @tt67wq #14 你想让我的用户(不会依赖管理的)安装 docker ?
|
21
ClericPy 2019-12-21 21:27:12 +08:00
@lihongjie0209 #5 C 扩展本来就不是跨平台的, 毕竟得 build, 保证打包机环境一致就行了. shiv 是 linkedin 很早以前按 PEP 441 搞的
|
22
wzwwzw 2019-12-21 22:05:50 +08:00
用 go 吧。pyinstaller 打包成 exe,特别慢。
|
24
20150517 2019-12-21 22:26:17 +08:00 via Android
docker
|
25
wuwukai007 2019-12-21 22:29:45 +08:00 via Android
什么 docker 啊,能审题吗各位?
|
26
tfdetang 2019-12-21 23:01:31 +08:00
你也没说大概什么样的程序,需要在什么样的环境下运行,linux? win? 有不少包都是有系统依赖的,又不是光把 python 装好就行的。 比较复杂的程序都建议用 docker 来做交付,省的麻烦自己
|
27
hhhsuan 2019-12-21 23:32:26 +08:00
venv 就是干这事的啊,开发完把整个环境打包就行了。
|
28
sunwei0325 2019-12-22 02:44:40 +08:00
|
30
xingheng 2019-12-22 10:12:36 +08:00 via iPhone
|
31
secondwtq 2019-12-22 12:44:19 +08:00
楼主 Java 用得这么溜用啥 Python…居然还有推荐 Go 的,简直是故意气楼主
|
32
lihongjie0209 OP @secondwtq 写个小工具当然不用 java,go 也可以, 只是不熟悉。
|
33
loginv2 2019-12-22 13:08:09 +08:00
我记得以前狗阿根廷就是打包的 python 不知道那种是怎么弄的
|
35
anewg 2019-12-22 15:56:18 +08:00
docker 笑了,干脆让客户自己写代码去吧
|