Python 的包管理

2018-12-12 04:19:16 +08:00
 raawaa

刚刚入门 python, 是从隔壁 nodejs 转过来的.

node 里用 npm 管理包和依赖十分方便, python 里貌似最近才出现类似的东西:pipenv

但是 pipenv 每次算个 lockfile 就要很久, 效率好低. 难道 python 的依赖管理就这么不堪吗. 求教

3996 次点击
所在节点    Python
29 条回复
zqguo
2018-12-12 11:02:06 +08:00
pipenv 真香
www5070504
2018-12-12 11:24:15 +08:00
python 的包管理就跟 shi 一样 居然还有重名包这种操作 当初刚开始弄 docker 的时候简直没被坑死
miniyao
2018-12-12 11:34:09 +08:00
包管理里面的自依赖版本冲突,虽然日常中出现的比较少,也没有发现好的解决方法。
frostming
2018-12-12 14:47:28 +08:00
@OldPanda @jmc891205 @xuanli 之所以 virtualenv+pip 够用是没碰到坑

@xiaket 描述的问题是真实存在且 pip 没有解决的,pipenv 不仅是 pip+virtualenv,它还包括 resolver.
raawaa
2018-12-12 19:54:51 +08:00
@xiaket "npm 没有处理依赖管理和版本冲突问题"这点不太明白。

http://npm.github.io/how-npm-works-docs/gitbook/images/npm3deps4.png

我的理解仅限于上面这张老图……
xiaket
2018-12-13 07:24:22 +08:00
每个包有个自己的子命名空间什么, 就我的理解, 真的不叫处理吧?
frostming
2018-12-13 11:35:50 +08:00
@raawaa 解决冲突的结果就是整个环境中 A 包只存在一个版本,而这个版本是考虑所有依赖后找到的满足所有限制的版本。不像 npm,可能会有多个版本共存。

pip 没有解决这个问题,最后 A 包的版本可能并不满足所有限制
frostming
2018-12-13 11:37:36 +08:00
@raawaa 解决冲突就好像在解方程组:
A>=2.0, < 3.0
A~=2.0
A>=2.5

解得 A==2.8.5,所以这个过程叫 resolve
raawaa
2018-12-15 11:50:10 +08:00
@frostming 明白了

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

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

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

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

© 2021 V2EX