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

请教 Python 的包依赖冲突

  •  
  •   orioleq · 104 天前 via iPhone · 2218 次点击
    这是一个创建于 104 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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


    github dependabot 负责依赖库版本更新.
    dependabot 创建 pr 之后, pytest 负责单元测试, 看到消息上去处理一下就行了,
    该 merge 的 merge, 该 close 的 close
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2708 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:19 · PVG 23:19 · LAX 07:19 · JFK 10:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.