有人尝试过使用 pypi 分发二进制程序吗?

2021-11-17 15:05:03 +08:00
 ihciah

RT 。有些 go/rust 写的小工具,想让用户能够快速安装(在不安装 go/rust 本身的前提下)。

稍微研究了一下,pypi 支持上传 WHEEL 和 源代码 形式的软件包; WHEEL 形式适合分发带有二进制的东西,可以根据平台系统等拉取对应版本。

但是似乎想直接放 bin 里的时候有点困难,只能在 entry_points.txt 里指定 python 模块名,这样调用二进制就得绕一次 python 。。

有什么更优雅的办法做这件事吗?或者说有什么更方便通用的平台可以分发二进制?

关于为什么想用 pypi 这种专门分发 python 代码的平台: 因为实在是太方便了,各平台(除了 windows)都能直接用内置的软件包管理器安装,并且国内镜像源也比较完善。

3704 次点击
所在节点    Python
23 条回复
necomancer
2021-11-17 15:11:07 +08:00
conda ?
ihciah
2021-11-17 15:17:07 +08:00
@necomancer 安装 conda 本身也要手动区分平台并下载安装包(并且也不小),感觉也有点麻烦。
Buges
2021-11-17 15:24:57 +08:00
不要这样滥用,pip 安装命令行程序本身就很糟糕,你还不如上 npm 。

建议写个 brew formula ,mac 和 linux 都可以用。Windows 的话以前都用 scoop ,也可以看看微软自己的 winget ,听说已经内置了。
ipwx
2021-11-17 15:53:14 +08:00
你这种方式滥用了。
virusdefender
2021-11-17 15:56:17 +08:00
各个操作系统上并不是默认都有 pip ,你这种让用户 curl https://xxx/install.sh | bash 可能更好一些
necomancer
2021-11-17 16:15:39 +08:00
@ihciah miniconda 也就 20M 吧……
Vegetable
2021-11-17 16:22:38 +08:00
可着 NPM 祸害吧还是
LeeReamond
2021-11-17 16:23:35 +08:00
其实我感觉倒不算滥用,毕竟 py 做胶水,其他语言做里子就是 py 的常见特性之一。分发方面我以前折腾过 win ,linux 的多发行版没折腾明白,如果 lz 明白还请教我。确实如 lz 所说无法直接部署到系统目录,需要使用 py 的构建命令能力,但是调用 api 的话 py 有多版本二进制重编译的问题,比如 cython 的构建结果不能跨版本,pyo3 也是一样,发布的 ci 上要费点功夫
Kobayashi
2021-11-17 16:41:18 +08:00
pypi 发布二进制,npm 发布 shell 脚本,我觉得你们这帮人是滥用……
Leviathann
2021-11-17 16:42:41 +08:00
我觉得还是用 npm 做这个比较好
npm 连 windows build tool 都能装🐶
lc1450
2021-11-17 16:58:22 +08:00
你 go/rust 的事找我 pypi 作甚?
hxsf
2021-11-17 17:01:46 +08:00
走正经包管理啊。
不愿意适配多个包管理器,就留 2 个脚本,一个 bash 一个 cmd ,帮他们下载放到对应位置不就行了?

折腾花里胡哨的,本来一句 wget 搞定的事情,我还得先确定我的 pip 是好使的?万一我是最小化安装的 linux ,还得装个 python ?
keepeye
2021-11-17 17:08:05 +08:00
丢到 oss 或者 github release ,用 shell 拉取不就行了吗
zjsxwc
2021-11-17 18:19:24 +08:00
给个 github release 这种下载地址不就好了。
frostming
2021-11-17 18:23:59 +08:00
看这里 https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-scripts-keyword-argument

你只需在 build 期间把 rust 编译的二进制放到对应目录下,就可以打进 wheel 包里
至于怎么在 build 期间做事情,你随便看个比如说 Pytorch 的 setup.py 就明白了
kidonng
2021-11-17 19:24:17 +08:00
用 pypi 的例子不多,用 npm 分发二进制的倒是不少。只要文件不大没啥滥用问题,十几兆的 typescript 每天被拖无数次也没人说啊。
messense
2021-11-17 19:33:16 +08:00
sleeepyy
2021-11-17 21:46:36 +08:00
如果是 portable 程序的话,你直接对每个平台搞一个 link 来下载对应的可执行文件不就好了?
kidonng
2021-11-17 22:35:41 +08:00
另外 npm 分发的话还可以用 npx ,低配 nix run 了属于是🐶
leavic
2021-11-17 22:41:50 +08:00
用 python 把工具重写一遍

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

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

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

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

© 2021 V2EX