RT 。有些 go/rust 写的小工具,想让用户能够快速安装(在不安装 go/rust 本身的前提下)。
稍微研究了一下,pypi 支持上传 WHEEL 和 源代码 形式的软件包; WHEEL 形式适合分发带有二进制的东西,可以根据平台系统等拉取对应版本。
但是似乎想直接放 bin 里的时候有点困难,只能在 entry_points.txt
里指定 python 模块名,这样调用二进制就得绕一次 python 。。
有什么更优雅的办法做这件事吗?或者说有什么更方便通用的平台可以分发二进制?
关于为什么想用 pypi 这种专门分发 python 代码的平台: 因为实在是太方便了,各平台(除了 windows)都能直接用内置的软件包管理器安装,并且国内镜像源也比较完善。
1
necomancer 2021-11-17 15:11:07 +08:00
conda ?
|
2
ihciah OP @necomancer 安装 conda 本身也要手动区分平台并下载安装包(并且也不小),感觉也有点麻烦。
|
3
Buges 2021-11-17 15:24:57 +08:00 via Android
不要这样滥用,pip 安装命令行程序本身就很糟糕,你还不如上 npm 。
建议写个 brew formula ,mac 和 linux 都可以用。Windows 的话以前都用 scoop ,也可以看看微软自己的 winget ,听说已经内置了。 |
4
ipwx 2021-11-17 15:53:14 +08:00 2
你这种方式滥用了。
|
5
virusdefender 2021-11-17 15:56:17 +08:00
各个操作系统上并不是默认都有 pip ,你这种让用户 curl https://xxx/install.sh | bash 可能更好一些
|
6
necomancer 2021-11-17 16:15:39 +08:00
@ihciah miniconda 也就 20M 吧……
|
7
Vegetable 2021-11-17 16:22:38 +08:00
可着 NPM 祸害吧还是
|
8
LeeReamond 2021-11-17 16:23:35 +08:00
其实我感觉倒不算滥用,毕竟 py 做胶水,其他语言做里子就是 py 的常见特性之一。分发方面我以前折腾过 win ,linux 的多发行版没折腾明白,如果 lz 明白还请教我。确实如 lz 所说无法直接部署到系统目录,需要使用 py 的构建命令能力,但是调用 api 的话 py 有多版本二进制重编译的问题,比如 cython 的构建结果不能跨版本,pyo3 也是一样,发布的 ci 上要费点功夫
|
9
Kobayashi 2021-11-17 16:41:18 +08:00
pypi 发布二进制,npm 发布 shell 脚本,我觉得你们这帮人是滥用……
|
10
Leviathann 2021-11-17 16:42:41 +08:00 via iPhone
我觉得还是用 npm 做这个比较好
npm 连 windows build tool 都能装🐶 |
11
lc1450 2021-11-17 16:58:22 +08:00
你 go/rust 的事找我 pypi 作甚?
|
12
hxsf 2021-11-17 17:01:46 +08:00
走正经包管理啊。
不愿意适配多个包管理器,就留 2 个脚本,一个 bash 一个 cmd ,帮他们下载放到对应位置不就行了? 折腾花里胡哨的,本来一句 wget 搞定的事情,我还得先确定我的 pip 是好使的?万一我是最小化安装的 linux ,还得装个 python ? |
13
keepeye 2021-11-17 17:08:05 +08:00
丢到 oss 或者 github release ,用 shell 拉取不就行了吗
|
14
zjsxwc 2021-11-17 18:19:24 +08:00 via Android
给个 github release 这种下载地址不就好了。
|
15
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 就明白了 |
16
kidonng 2021-11-17 19:24:17 +08:00 via Android
用 pypi 的例子不多,用 npm 分发二进制的倒是不少。只要文件不大没啥滥用问题,十几兆的 typescript 每天被拖无数次也没人说啊。
|
17
messense 2021-11-17 19:33:16 +08:00 via iPhone
|
18
sleeepyy 2021-11-17 21:46:36 +08:00
如果是 portable 程序的话,你直接对每个平台搞一个 link 来下载对应的可执行文件不就好了?
|
19
kidonng 2021-11-17 22:35:41 +08:00 via Android
另外 npm 分发的话还可以用 npx ,低配 nix run 了属于是🐶
|
20
leavic 2021-11-17 22:41:50 +08:00
用 python 把工具重写一遍
|
21
deplivesb 2021-11-18 10:07:30 +08:00
本来一个 wget 能搞定的事情,非要再装一个 pip
|
22
julyclyde 2021-11-18 10:42:41 +08:00
setup 函数支持 scripts 参数
|
23
O5oz6z3 2021-11-19 16:35:05 +08:00
pypi 在二进制分发上弯道超车 go 了属于是
|