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 ![]() 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 219-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 搞的 |
![]() | /td> | 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 笑了,干脆让客户自己写代码去吧 |