有人尝试过使用 pypi 分发二进制程序吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ihciah
0.19D
0.03D
V2EX    Python

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

  •  
  •   ihciah
    ihciah 2021-11-17 15:05:03 +08:00 4117 次点击
    这是一个创建于 1424 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    23 条回复 &nbp;  2021-11-19 16:35:05 +08:00
    necomancer
        1
    necomancer  
       2021-11-17 15:11:07 +08:00
    conda ?
    ihciah
        2
    ihciah  
    OP
       2021-11-17 15:17:07 +08:00
    @necomancer 安装 conda 本身也要手动区分平台并下载安装包(并且也不小),感觉也有点麻烦。
    Buges
        3
    Buges  
       2021-11-17 15:24:57 +08:00 via Android
    不要这样滥用,pip 安装命令行程序本身就很糟糕,你还不如上 npm 。

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

    折腾花里胡哨的,本来一句 wget 搞定的事情,我还得先确定我的 pip 是好使的?万一我是最小化安装的 linux ,还得装个 python ?
    keepeye
        13
    keepeye  
       2021-11-17 17:08:05 +08:00
    丢到 oss 或者 github release ,用 shell 拉取不就行了吗
    zjsxwc
        14
    zjsxwc  
       2021-11-17 18:19:24 +08:00 via Android
    给个 github release 这种下载地址不就好了。
    frostming
        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 就明白了
    kidonng
        16
    kidonng  
       2021-11-17 19:24:17 +08:00 via Android
    用 pypi 的例子不多,用 npm 分发二进制的倒是不少。只要文件不大没啥滥用问题,十几兆的 typescript 每天被拖无数次也没人说啊。
    messense
        17
    messense  
       2021-11-17 19:33:16 +08:00 via iPhone
    sleeepyy
        18
    sleeepyy  
       2021-11-17 21:46:36 +08:00
    如果是 portable 程序的话,你直接对每个平台搞一个 link 来下载对应的可执行文件不就好了?
    kidonng
        19
    kidonng  
       2021-11-17 22:35:41 +08:00 via Android
    另外 npm 分发的话还可以用 npx ,低配 nix run 了属于是
    leavic
        20
    leavic  
       2021-11-17 22:41:50 +08:00
    用 python 把工具重写一遍
    deplivesb
        21
    deplivesb  
       2021-11-18 10:07:30 +08:00
    本来一个 wget 能搞定的事情,非要再装一个 pip
    julyclyde
        22
    julyclyde  
       2021-11-18 10:42:41 +08:00
    setup 函数支持 scripts 参数
    O5oz6z3
        23
    O5oz6z3  
       2021-11-19 16:35:05 +08:00
    pypi 在二进制分发上弯道超车 go 了属于是
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5490 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 08:43 PVG 16:43 LAX 01:43 JFK 04:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86