推荐学习书目
› 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
orioleq
V2EX  ›  Python

请教 Python 的包依赖冲突

  •  
  •   orioleq · Aug 9, 2024 via iPhone · 6070 views
  •   You need to sign in to view this topic
    This topic created in 796 days ago, the information mentioned may be changed or developed.

    1.升级版本的时候经常遇到版本冲突的问题。有没有类似 java mvnrepository 的地方可以看到所有 lib 的第三方依赖的版本? 2.我现在用 anaconda 打出来的 docker image 要 3g 大。大家的包一般都多大?有什么办法怎么优化大小?换 miniconda ?( conda cache 已清除)

    17 replies  •  2024-08-10 17:59:13 +08:00
    Dece
        1
    Dece  
       Aug 9, 2024   ❤️ 1
    可以尝试下 poetry ,来解决版本冲突问题
    thinkershare
        2
    thinkershare  
       Aug 9, 2024
    就是这个样子,python 的包版本设计有问题,暂时没有解决办法。
    thinkershare
        3
    thinkershare  
       Aug 9, 2024   ❤️ 1
    miniconda 等工具都无法完全解决问题,而且现在 miniconda 太慢了,用 conda-lock 锁定版本可能回好点,conda 解析依赖一旦包太多,搜索回慢的令人发指。
    chaunceywe
        4
    chaunceywe  
       Aug 9, 2024   ❤️ 1
    可以试试 rye
    ruanimal
        5
    ruanimal  
       Aug 9, 2024   ❤️ 1
    换 miniconda 吧,conda 默认把它祖孙三代都装上了,能不大吗
    paopjian
        6
    paopjian  
       Aug 9, 2024   ❤️ 1
    docker 打包都是最小原则,你这直接上 anaconda 过分了吧,不是应该 pip freeze 导出安装列表么
    huangyezhufeng
        7
    huangyezhufeng  
       Aug 9, 2024   ❤️ 1
    https://datahonor.com/mppt/package/

    建议 poetry 或者 uv ,如果依赖 conda 环境可以用 pixi
    peanutBark
        8
    peanutBark  
       Aug 9, 2024
    poetry 好用+1
    mongoose
        9
    mongoose  
       Aug 9, 2024   ❤️ 1
    @thinkershare 试试 mamba ,它速度能快点,是 conda 的一个实现,解析依赖的速度比 conda 快多了,但是它也不能解决打包太大的问题。
    thinkershare
        10
    thinkershare  
       Aug 9, 2024   ❤️ 1
    @mongoose 这个我也试过。主要还不是解析依赖慢,而是现在的版本策略,同一个环境,同样的一份依赖,隔一段时间再安装,会因为实际安装的版本的变化导致原来的版本无法运行。随着安装的包数量越多,依赖冲突解决的时间就越长,我已经遇到过很多次,包版本相互冲突,conda 安装一个新的包会破坏旧的包的依赖。最终各种手动强制安装出来一份能用的,不想折腾,直接锁定每个平台的包版本地址,以后再使用的时候,不解析依赖了,直接用锁定文件安装。
    普通的 python 网站/爬虫类其实关系不大,主要是机器学习的很多包,都有对底层 CUDA 的特定版本依赖,就很烦。
    nulIptr
        11
    nulIptr  
       Aug 9, 2024
    docker image 大小可以拆多个 layer 解决,搞个装好所有依赖的 layer ,再打包只变更代码就行了
    TimCoke
        12
    TimCoke  
       Aug 9, 2024
    基础镜像用带 slim 后缀的,比如我用 python3.12 打出来将近 2G ,用 python3.12-slim 打出来 300M
    orioleq
        13
    orioleq  
    OP
       Aug 9, 2024 via iPhone
    @nulIptr docker 分层缓存似乎只能解决打包速度的问题,大小应该差不多吧
    nulIptr
        14
    nulIptr  
       Aug 9, 2024   ❤️ 1
    @orioleq 增量变小了,你打镜像最终在 k8s 机器上跑的时候也会有缓存啊。只 pull 增量的速度还是会快很多的。
    stay4u
        15
    stay4u  
       Aug 9, 2024
    同一楼,poetry 管理
    ruanimal
        16
    ruanimal  
       Aug 10, 2024
    @mongoose 有 minimamba
    luckyc
        17
    luckyc  
       Aug 10, 2024   ❤️ 1
    本地开发环境:
    pyenv 管理 python 版本
    poetry 管理项目依赖


    github dependabot 负责依赖库版本更新.
    dependabot 创建 pr 之后, pytest 负责单元测试, 看到消息上去处理一下就行了,
    该 merge 的 merge, 该 close 的 close
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4063 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 05:17 · PVG 13:17 · LAX 22:17 · JFK 01:17
    ♥ Do have faith in what you're doing.