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

2020-03-20 06:31:53 +08:00
 miniyao
virtualenv 里已经安装了某 a 库 1.0 版本,结果在安装某 b 库时依赖 a 的版本是 2.0。

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

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

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

当然如果你的 a 库写依赖的时候只写了 b 的最低版本限制没写最高版本限制还是死翘翘…
ClericPy
2020-03-20 10:55:55 +08:00
遇到过一次... 魔改了最小的那个库, 后来还是有问题, 直接弃用这种不更新的库了...
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
2020-03-30 22:47:20 +08:00
@a132811 你是说 a 依赖 c<1.0, b 依赖 c >=1.0 这种情况吗,如果没得解确实会报错

但我也在研究让两个版本共存的方法了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654438

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX