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

现在开一个新的 Python 项目,哪个包管理器比较合适?哪种打包分发方式(不需要编译)比较合适?

  •  
  •   MiketsuSmasher · 2022-02-01 13:14:25 +08:00 · 6654 次点击
    这是一个创建于 1020 天前的主题,其中的信息可能已经有所发展或是发生改变。
    27 条回复    2022-04-11 21:35:00 +08:00
    learningman
        1
    learningman  
       2022-02-01 13:17:59 +08:00   ❤️ 1
    推荐 poetry
    poetry publish --build 就走了
    ClericPy
        2
    ClericPy  
       2022-02-01 13:25:53 +08:00   ❤️ 2
    除了楼上的, 貌似还有 flit, 被官方招安了
    orange
        3
    orange  
       2022-02-01 13:42:28 +08:00
    关注
    aloxaf
        4
    aloxaf  
       2022-02-01 15:26:13 +08:00
    来用 pdm
    liuhai233
        5
    liuhai233  
       2022-02-01 15:30:09 +08:00
    docker 使用者表示万物皆可 docker, 一个 requirements.txt 就够了
    ericgui
        6
    ericgui  
       2022-02-01 15:37:25 +08:00
    @liuhai233 有道理
    learningman
        7
    learningman  
       2022-02-01 15:54:24 +08:00
    @liuhai233 #5 alpine 装带 C 库的包容易炸,slim 就 300m 了。。。
    SuperMild
        8
    SuperMild  
       2022-02-01 17:16:59 +08:00   ❤️ 1
    看过 poetry 和 flit ,因为表面上看来 flit 比较简单我就选择了 flit ,使用过程中总的来说比较顺利。
    ospider
        9
    ospider  
       2022-02-01 17:32:07 +08:00
    pipenv 强烈不推荐。我以前是比较推荐的 poetry 的,但是遇到 bug 太多了,而且 resolve 起来特别慢。现在看起来 flit 应该是不错的。
    sch1111878
        10
    sch1111878  
       2022-02-01 19:48:28 +08:00
    @ospider pipenv 直接接触感觉还是很不错的, 和 npm cocoapods 有相似之处, 请问不推荐的原因是什么?
    matrix67
        11
    matrix67  
       2022-02-01 20:30:16 +08:00   ❤️ 1
    @sch1111878 #10

    python 包版本吃瓜

    1. 没法单独更新包
    2. 代码未动,文档( PR )先行
    3. 卸载包更新
    4. I have no idea.
    5. 伪装官方
    6. 喜欢烂尾
    7. 速度慢 Lock 时间长
    8. 对项目发展没有信心
    9. Poetry?也不行
    10. 没有任何官方和核心开发者支持
    11. 未处理的 Issue/PR 太多

    情报来源:
    https://v2ex.com/t/777916
    https://www.zhihu.com/question/322932995/answer/672812417
    mekingname
        12
    mekingname  
       2022-02-01 21:17:08 +08:00   ❤️ 1
    Poetry 有一个很严重的问题,就是它的依赖在不同的系统会冲突。

    例如,你使用 macOS 开发,通过 poetry add uvicorn 安装了这个包。

    然后你到 Linux 系统上部署,如果你带上了 macOS 上面生成的.lock 文件,那么你执行 poetry install 安装以后,运行就会报错,因为它安装的这个版本是 macOS 的版本,在 Linux 上不能用。你必须先删除.lock 文件,再 poetry install 才能使用。
    @learningman
    neoblackcap
        13
    neoblackcap  
       2022-02-01 21:19:56 +08:00
    如果你目标平台是 Debian 系的 Linux 发行版,那么请使用 dh-virtualenv 工具构建一个 deb 包作为构建产物。
    此方法是我认为相对较好的了。同理 Redhat 系的也可以去寻找相类似的工具,原理还是构建一个目标平台的包。

    这种方法的优势在于,
    1. 可以完全在构建机器上完成构建。
    2. 对系统依赖极低,基本上只依赖 CPython 解析器,同时如果依赖第三方库,可以通过发行版的包管理器解决。
    3. 打包的产物基本上就是你要部署的文件,一般情况下可以做到比 Docker 镜像更小
    4. 可以编写 Systemd/init.d 脚本,部署的时候一并部署了,完全做到通过系统命令来管理程序生命周期( start/stop/restart)
    5. 可以更加容易地部署静态资源文件,而不用考虑资源文件在项目中的组织或者所在相对目录
    learningman
        14
    learningman  
       2022-02-01 21:28:05 +08:00
    @mekingname #12 没遇到过这个问题。。。至少对我而言,Windows 的项目在 Linux 运行正常
    arischow
        15
    arischow  
       2022-02-01 22:05:51 +08:00
    @mekingname #12 这个我感觉不太可能吧……
    ispinfx
        16
    ispinfx  
       2022-02-01 23:09:30 +08:00 via iPhone
    @mekingname poetry 不就是用来解决这些问题的吗…怎么可能…没遇到过…
    felixcode
        17
    felixcode  
       2022-02-02 04:32:26 +08:00 via Android
    @mekingname
    是不是碰到 x86 和 arm 的问题了
    ericgui
        18
    ericgui  
       2022-02-02 08:08:00 +08:00   ❤️ 1
    pip 有什么问题吗
    Macv1994
        19
    Macv1994  
       2022-02-02 11:45:00 +08:00 via Android
    我还是原始的 pip🐶
    liuhai233
        20
    liuhai233  
       2022-02-02 20:25:21 +08:00 via iPhone
    @learningman 确实,前司 python 项目镜像装完依赖 2GB
    Vegetable
        21
    Vegetable  
       2022-02-03 00:01:29 +08:00
    当下我简单调研发现只有 poetry 一个选择比较好。resolve 有时候确实比较慢,注意选择合适的源。

    flit 并没有用过,简单看一下好像是聚焦在打包发布方面的。但是 poetry 不是。

    pipenv...用过,体验很差。

    不也包管理只管理 requirements 不是不行,但是这样还要手动维护虚拟环境,麻烦。

    我使用 poetry 管理的唯一痛点就是,没有一个 js 的 husky 这种分发 githook 的工具。 不过这不算 poetry 的问题
    maniaccn
        22
    maniaccn  
       2022-02-04 18:21:36 +08:00
    包管理器不知道,但是分发的话,docker 最省事
    frostming
        23
    frostming  
       2022-02-07 20:18:54 +08:00
    @Vegetable
    我使用 poetry 管理的唯一痛点就是,没有一个 js 的 husky 这种分发 githook 的工具。 不过这不算 poetry 的问题

    Python 里对应的是 pre-commit ,但在 githook 上跑很重的任务( husky, pre-commit )这种是不是好的实践都是有争议的
    frostming
        24
    frostming  
       2022-02-07 20:30:26 +08:00
    看来 PDM 的普及程度还是不行,大家都不知道呢。如果用 Poetry 有什么不能忍的事情,不妨试试。
    dcoder
        25
    dcoder  
       2022-03-16 07:27:24 +08:00
    @frostming PDM 有没有跟 PyCharm 集成的计划?
    Poetry 现在被 PyCharm 支持了, PyCharm 新建项目会在其 Terminal 里自动设置好虚拟环境
    frostming
        26
    frostming  
       2022-03-16 11:45:06 +08:00   ❤️ 1
    sch1111878
        27
    sch1111878  
       2022-04-11 21:35:00 +08:00
    @matrix67 感谢回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1281 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.