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

pip 怎么解决依赖库的版本冲突问题?

  •  
  •   miniyao · 2020-03-20 06:31:53 +08:00 via Android · 8001 次点击
    这是一个创建于 1737 天前的主题,其中的信息可能已经有所发展或是发生改变。
    virtualenv 里已经安装了某 a 库 1.0 版本,结果在安装某 b 库时依赖 a 的版本是 2.0。

    手动安装 a 2.0 可能造成老代码出错,不安装 a 2.0 可能 b 库会出错。这个情况要怎么解决的?
    14 条回复    2020-03-30 22:47:20 +08:00
    CEBBCAT
        1
    CEBBCAT  
       2020-03-20 07:57:28 +08:00 via Android
    anaconda virtualenv pyenv 都可以吧,发帖前记得先搜索一下
    superrichman
        2
    superrichman  
       2020-03-20 08:04:27 +08:00 via iPhone   ❤️ 1
    你已经是虚拟环境了,那就只能改代码,要么换 c 库代替 b 库
    miniyao
        3
    miniyao  
    OP
       2020-03-20 08:05:46 +08:00 via Android
    @CEBBCAT 说了在 virtualenv 里
    loading
        4
    loading  
       2020-03-20 08:06:18 +08:00 via Android
    如果必须同时跑,要么找旧版 b,要么改代码
    lgh
        5
    lgh  
       2020-03-20 08:13:14 +08:00 via iPhone
    Pipenv 能分析出这种冲突,但是巨慢。
    而且解决办法也只能像楼上说的,b 降版本或找别的库代替或自己撸一个或把老代码用到 a 的地方改成 2.0 版本的写法
    CEBBCAT
        6
    CEBBCAT  
       2020-03-20 08:27:55 +08:00 via Android
    @miniyao 这可真尴尬
    frostming
        7
    frostming  
       2020-03-20 09:14:58 +08:00
    @CEBBCAT 你需要一个带依赖解析功能的工具,众所周知 pip 是没有这个东西(但正在做了)

    除了前面有人提到的 pipenv, 还有 pip-tools, poetry
    我自己也写了个基于 PEP 582 的 pdm - https://github.com/frostming/pdm
    frostming
        8
    frostming  
       2020-03-20 09:19:32 +08:00
    艾特错了 @miniyao
    ipwx
        9
    ipwx  
       2020-03-20 09:29:53 +08:00
    其实,无论哪个语言的包管理器,都不能自动帮你解决这一问题。

    你必须自己去把你的两个依赖修改到匹配为止。
    magicdawn
        10
    magicdawn  
       2020-03-20 09:33:27 +08:00 via iPhone   ❤️ 1
    node_modules 那种模式的好处体现了
    Trim21
        11
    Trim21  
       2020-03-20 10:26:09 +08:00 via Android
    poetry,限制一下 a 的最高版本,然后让它自动处理就好了。

    当然如果你的 a 库写依赖的时候只写了 b 的最低版本限制没写最高版本限制还是死翘翘…
    ClericPy
        12
    ClericPy  
       2020-03-20 10:55:55 +08:00
    遇到过一次... 魔改了最小的那个库, 后来还是有问题, 直接弃用这种不更新的库了...
    a132811
        13
    a132811  
       2020-03-30 14:11:52 +08:00
    @magicdawn node_module 是黑洞地狱呀

    还是喜欢 deno 的新方法:
    ```
    // deps.ts (replace node_module)
    export assert from "https://deno.land/std/testing/v1.0.0/asserts.ts";

    // app.ts
    import { assert } from "./deps.ts";
    ```

    @frostming 你这个 pdm 不能自动解决依赖库版本冲突吧?
    frostming
        14
    frostming  
       2020-03-30 22:47:20 +08:00
    @a132811 你是说 a 依赖 c<1.0, b 依赖 c >=1.0 这种情况吗,如果没得解确实会报错

    但我也在研究让两个版本共存的方法了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2764 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:00 · PVG 15:00 · LAX 23:00 · JFK 02:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.