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 · 71 天前 · 2547 次点击
    这是一个创建于 71 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
       71 天前
    conda ?
    ihciah
        2
    ihciah  
    OP
       71 天前
    @necomancer 安装 conda 本身也要手动区分平台并下载安装包(并且也不小),感觉也有点麻烦。
    Buges
        3
    Buges  
       71 天前 via Android
    不要这样滥用,pip 安装命令行程序本身就很糟糕,你还不如上 npm 。

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

    折腾花里胡哨的,本来一句 wget 搞定的事情,我还得先确定我的 pip 是好使的?万一我是最小化安装的 linux ,还得装个 python ?
    keepeye
        13
    keepeye  
       71 天前
    丢到 oss 或者 github release ,用 shell 拉取不就行了吗
    zjsxwc
        14
    zjsxwc  
       71 天前 via Android
    给个 github release 这种下载地址不就好了。
    frostming
        15
    frostming  
       71 天前
    看这里 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  
       71 天前 via Android
    用 pypi 的例子不多,用 npm 分发二进制的倒是不少。只要文件不大没啥滥用问题,十几兆的 typescript 每天被拖无数次也没人说啊。
    messense
        17
    messense  
       71 天前 via iPhone
    sleeepyy
        18
    sleeepyy  
       71 天前
    如果是 portable 程序的话,你直接对每个平台搞一个 link 来下载对应的可执行文件不就好了?
    kidonng
        19
    kidonng  
       71 天前 via Android
    另外 npm 分发的话还可以用 npx ,低配 nix run 了属于是🐶
    leavic
        20
    leavic  
       71 天前
    用 python 把工具重写一遍
    deplivesb
        21
    deplivesb  
       71 天前
    本来一个 wget 能搞定的事情,非要再装一个 pip
    julyclyde
        22
    julyclyde  
       71 天前
    setup 函数支持 scripts 参数
    O5oz6z3
        23
    O5oz6z3  
       69 天前
    pypi 在二进制分发上弯道超车 go 了属于是
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3395 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:39 · PVG 11:39 · LAX 19:39 · JFK 22:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.