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
V2EX  ›  Python

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

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

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

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

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

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

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

    23 条回复    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 都能装🐶
    lc1450
        11
    lc1450  
       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   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:07 · PVG 08:07 · LAX 16:07 · JFK 19:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.