也是醉了,最近使用 docker+poetry 1.5.1 部署一个项目,dockerfile 模板之前一直正常,最近推送代码到部署环境,发现 docker build 居然失败。一查发现怎么缺少了依赖库?平时使用 poetry 安装不都是自动装依赖库的吗?
去 github issue 一查,发现这个问题才明白,poetry 的依赖崩了。。。导致重新创建新的环境的时候,再使用 poetry 创建环境就出现安装依赖错误。。。
解决方案是要锁定 pkginfo 版本
poetry self add pkginfo==1.10.0
但是改了好几次 dockerfile 还是不行,最后还是导出 requirements.txt ,用 pip 方式安装,改写 dockerfile 后终于部署正常了。。。
以前受过 pipenv 的教训,它过了一段时间再安装,会出可能启动不了项目,是由于 pipenv 没有完全锁死依赖库版本。现在本来以为 poetry 包管理器足够稳定,可以一直安心用不加班,没想到现在又要重新更好一点的包管理器,或者用回 pip
1
runinhard 70 天前 4
是的 ,全他么是垃圾
|
2
dcoder 70 天前
go.mod / Rust cargo:
我不是针对你 poetry, 我是说在座的各位 python 包管理, 都是垃圾 ... |
3
dcoder 70 天前
认真讨论, Python 的包管理真的太拉胯了...
说实话, 最近在考虑, 干脆用 conda + lock 得了 https://github.com/conda/conda-lock 还方便折腾 AI 的东西 |
6
jiayouzl 70 天前 6
pip 适合 99.99%开发者!别搞什么花里胡哨的!我以前就用 virtualenv 后来 Python 自带虚拟环境了我连 virtualenv 都不装了.
|
7
itskingname 70 天前
Python 3.12 开始,pip 安装就会给你报错缺少 Imp 包。
|
8
cherryas 70 天前
原生 env 一把梭
|
9
TimePPT 70 天前
开发环境 poetry ,部署乖乖用 pip...
|
10
SilentOrFight 70 天前
python 包管理是真的乱
|
11
SenLief 70 天前
我都是用自带的 venv ,可能项目比较小。
|
12
Goooooos 70 天前 2
懒得折腾,都是 conda+pip
|
14
Numbcoder 70 天前 5
每次看到有人尬吹 “人生苦短,我用 Python” 我就想笑
|
15
sweat89 70 天前
我用 conda ,感觉很方便啊
|
16
dishonest 70 天前
确实是垃圾。不要说包管理不重要,太影响体验了。
我甚至因为 cargo 的便利,硬学了 rust 。 |
17
encro 70 天前
uv 真快。。。
|
18
encro 70 天前
pdm 也不错
|
19
FleetingSound 70 天前
poetry 挺好用的,uv 也不错.
|
20
qsnow6 70 天前
依赖越少越好
|
21
yolee599 70 天前 3
python -m venv you_path
不就行了? |
22
darksword21 70 天前
能过部署能 pip 最好直接 pip
conda 也是废物,经常无法 activate ,我在 sagemaker 上部署如果是 conda 的还导致没有日志 哎 python ,心累 |
23
houzhiqiang 70 天前
目前在用 pdm ,没有遇到什么问题。pdm 运行慢我是无所谓
|
24
alexsz 70 天前
用 docker 部署时我都不用 venv
|
25
phithon 70 天前
PEP 668 以后,不用 virtualenv 以后默认不让 pip 装依赖了
|
26
lxdlam 70 天前
最近两年都在用 rye ,切到 uv 之后体验丝滑
|
29
coolair 70 天前
用 uv ,一步到位。
|
30
pckillers 70 天前 1
都用 docker 了,自然直接 pip 全局安装啦。做好 image 版本备份,连 venv 都用不到。
|
31
GeekGao 70 天前
从 09 年开始就用 pip ,用了十多年了,没啥问题啊。 哈哈哈哈。操作姿势很重要。当然 Windows 平台除外。
|
32
siteshen 70 天前
以前用 pipenv 的,不过 pipenv 的依赖自动更新很讨厌。现在用 pipenv (不要 pip) + pip 。
生产环境用 pip install -r requirments.txt 开发环境用 pipenv shell; # update pypi mirror; pip install -r requirments.txt |
33
youngce 70 天前
venv + requirments.txt 。。。
|
34
noqwerty 70 天前 via iPhone
micromamba/uv 目前为止没遇到解决不了的
|
35
NoOneNoBody 70 天前 2
一个包 A 存在依赖 B ,用这个 A 去管理其他的,这本来就是个危险的事,除非能保证 AB 同步
包 A 没有依赖,或者说仅依赖原生,才是相对安全的选择 框架也是类似逻辑,生活中很多事也是这个逻辑,依赖的东西应该仅限于方便行动,而不是方便掌控 |
37
ClericPy 70 天前
除了现在的 uv ,其他的全用了一遍,有的在生产环境遇到 bug (虽然提了以后作者修了),最后还是 venv 就够了。。。
至于发包,打包成 zipapp 也不耽误,执行环境还是 venv 省事 |
38
Vegetable 70 天前
哪有在容器里边再构建虚拟环境得道理? poetry export 为 requirements.txt ,然后容器里直接 pip 才对。
poetry 最大的问题是慢,不过我也早就跑路到 rye 了 |
39
so1n 70 天前
poetry,pdm 都是本地用啊,线上还是导出 requirements 把
|
42
Trim21 70 天前 1
因为 pip 没法有外部依赖,所以直接把他用到的依赖给 vendor 了,所以等你好久不升级 pip ,pip 告诉你版本太旧装不了新依赖的时候你只需要升级 pip 就行。
poetry 没 vendor ,所以你还需要升级 poetry 的依赖。 |
43
donglintong 69 天前
uv +1
|
44
jqtmviyu 69 天前
uv +1
```sh # 安装 uv pip install -r requirements.txt # 导出 uv pip freeze > requirements.txt ``` |
45
mayli 69 天前 1
rye 好,快去用。
自从用了 rye ,我整个人的毒性都降低了,就感觉快 |
46
lgh 69 天前 via iPhone
在用 pdm ,暂时没有想换的理由。
楼上好多人把环境隔离和依赖管理混为一谈的。 用 pip 最大的问题还是直接依赖和间接依赖的区别。如果不用 pdm 的时候我会用 requirements.txt 管理直接依赖、再 freeze 成 requirements-lock.txt ,否则要升级某个库的时候简直想死。 |
47
hanxiV2EX 69 天前 via Android
pdm 真爽,用了回不去了。
|
48
qwq11 69 天前 via iPad
uv+1
|
50
tairan2006 69 天前
conda+pip
跑 docker 的话直接装全局就行 |
51
kaktos 69 天前
无脑上 uv ,其他看都不要看
|
52
bianjp 69 天前
poetry 不支持全局配置使用国内的 PyPI 镜像站挺不方便的,官方一直不愿意做这个功能。
|
53
wryyyyyyyyyyyy 69 天前
@encro pdm 综合使用体验感觉还不如 poetry ,吹的 pep 提出的那个特性被否了,没通过。
|
54
pl01665077 OP @dcoder 做 web 项目不太习惯用 conda ,嘿嘿
|
55
pl01665077 OP @jiayouzl 那也是,不过有时安装新的包总是忘记 pip freeze 等等。。。
|
56
pl01665077 OP @dishonest rust 我也会,不过 cargo 的源要配置国内源会方便点,一开始配置还挺麻烦的。。。
|
57
uni 69 天前
uvuvuv
|
58
pl01665077 OP @GeekGao 谢谢分享经历,哈哈,pip 还是稳
|
59
pl01665077 OP @siteshen 对,pipenv 自动更新依赖很讨厌。
|
60
pl01665077 OP @NoOneNoBody 对的,非常赞同!
|
61
pl01665077 OP @Vegetable poetry 也可以不用虚拟环境安装的,直接在容器里面全局安装。dockerfile 使用 poetry 主要是保持开发和生产环境一致性,而且开发时只需要 poetry install ,部署时省去很多导出 requirements.txt 步骤
|
62
pl01665077 OP @lgh 是手写 requirements.tx 管理依赖,freeze 生成 requirements-lock.txt 依赖吗?学习了
|
63
edisonwong 69 天前
最舒心的是 go mod ,不过也有遇到管理 etcd 包一坨 shit 的时候(那是因为作者反 go mod 一直不修); npm 是一坨,yarn ,pnpm ( workspace )反正前端每次构建都是个玄学; python 也好不到哪里去哈哈哈
|
64
lambdaq 69 天前 1
觉得 pip 垃圾的,因为很多东西是 .so 的东西导致的。
其他语言包管理不是强,而是原生性能能支持 99%的功能纯语言实现了 但凡你 cgo JNI 搞进去,依赖管理也会变得复杂。 纯.py 的包管理复杂吗?一点都不复杂。直接全部复制到项目 lib 目录就 vendoring 了。什么版本管理冲突安装失败,不存在的。举个例子,以前 requests 就是这样复制了一套 urllib3 打包一起的。 |
65
Trim21 69 天前
poetry 有 export ,你 poetry export -f requirements.txt --output requirements.txt 然后用 pip 装不就是了,还能减少 镜像层数。。。
|
66
chopin1998519 69 天前
我用了十年 python , 一直都是 sudo pip 的。。。。
知道最近项目实在太杂,互相依赖玩儿崩了, 老老实实用了曾经嗤之以鼻的 venv+pip , 但是每个环境都重新来一次 nv 的那一大坨库实在不舒服。。。。 比较了一下 pdm/ uv , 目前选了 uv , 简单用了一下还是挺舒服的。。。 不过也遇到一个环境, 没法用, 单独给它开个 venv 。。。 |
67
wupher 69 天前
uv + 1
Rust 完善工具链方面,真是没说的。 |
68
pl01665077 OP @chopin1998519 对,每换个环境都重新来一次 pip+venv 太繁琐了,所以喜欢用 poetry install 一下就创建好了。
全局 pip 还是不太好,每个项目版本依赖不一样。 |
69
sickoo 69 天前
uv ? 我去看看 真的那么好用吗?
|
70
jiayouzl 69 天前
@pl01665077 养成个习惯,在 git push 的时候就维护下 requirements.txt 就行了.
|
71
stobacco 69 天前
我也是和楼主一样的历程,被 python 包管理弄得心态炸过几次,导致我现在都害怕包管理这个玩意儿 比如 node 、go 的,我没学它们之前以为和 python 包管理一样乱。。。
|
72
dcoder 69 天前
从这帖子里听说了 rye, uv
看了下, 都是 Rust 写的, 2023 才出来的新项目, git star: rye (13.6k), uv (20.9k) 好嘛, python 包管理真热闹, 没完没了了,是不是 XD 用来代替 conda 的话,哪个更好? |
73
yb2313 69 天前
有的项目用 poetry 安装一装一个报错, 还是用 uv 吧, rye 也是用的 uv
|
75
foyoux 69 天前
pip + venv
pip freeze > requirements.txt |
76
dcoder 69 天前
看了下 rye ,优势是把多个工具整合在一起了. 比如整合 ruff, uv
目前看来, 貌似直接用 uv 就行了. |
79
lxdlam 69 天前 4
@SimonOne uv 是替代 pip 的,rye 是 flask 作者 mitsuhiko 创始的,他觉得 Python 的研发生态链比起 rust 实在是太烂了,自己搞了一个工具关注整个研发生命周期,使用 独立 python 解释器 + venv + pip + pyproject.toml 等既有生态来管理。后面 astral 团队开发完 uv 之后跟 mitsuhiko 沟通,接管了 rye 项目( https://astral.sh/blog/uv )。
从关系上来说,rye 是一个研发管理工具,基于 project 粒度隔离 python 解释器、venv ,自然也就隔离了包管理生态,uv 跟 pip 在 rye 里可以互换,ruff 也不是强制要求接入。 从我个人体感来说,rye + uv + ruff 就是目前最舒服的方案,我有用来实验的 jupyter 项目,也有打包成 oci 的纯 python 项目,rye 都能非常完美去接入和使用(除了某些模型代码里面写死了 pip 之外)。 P.S.,关于 Python 开发者体验和 rye 本身,mitsuhiko 在 rye 创始之初就有个 discussion ,值得一读: https://github.com/astral-sh/rye/discussions/6 |
80
beginor 69 天前 via Android
pip+venv 路过,3.12 之后还不能直接 pip 了,必须先建 venv 才行,venv 从此变成 python 版 node_modules
|
81
samzong 69 天前
@SimonOne #78 补充下我的理解,rye 目前比 uv 多了一个系统 python 版本管理的能力,类似 pyenv ; uv 会 find 你系统安装的多个版本的 python ,比如 brew install, pyenv install, rye install ,然后根据你的需求指向对应的版本。
使用之后发现,brew install python [email protected] [email protected] + uv 就很方便了。目前我也不在使用 pyenv 和 rye 了。 而且最近 uv 增加了很多 rye 的功能,那么最终 uv 貌似会往代替 rye 的方向发展 ??? maybe , 一点见解。 |
82
lonelyparasol 67 天前
@itskingname 3.12 版本不少库还没适配吧
|
84
purplemystic 36 天前
@chopin1998519 现在用 uv, 配置 cuda 环境很不美丽, 太大了, cuda 环境还是用的 docker
|
85
purplemystic 36 天前
@dcoder #74 rye 会逐步被 uv 替代, 这也是官方的路线
|
86
purplemystic 36 天前
@stobacco 第一次被恶心到, 还是 pipenv, 那个每次不知道等待多久的 locking
|
87
chopin1998519 35 天前
@purplemystic #84 不会啊。。。。我就是因为 cuda/torch 这个转过来的。。。docker 。。。。我更不喜欢
|
88
purplemystic 28 天前
@chopin1998519 #87 主要是 cuda, torch 之类的库太大了, 如果每次创建一个虚拟环境, 就下载编译一遍, 就好心累
|
89
chopin1998519 27 天前 1
@purplemystic #88 uv 会用硬链接、符号链接、cow 等等 共享相同的版本呀, 所以实际就一份,upgrade 了另说
|
90
hellomacos 12 天前
poetry 要是遇到需要同一个依赖,但是需要的版本的不同,那是真的坑。人都傻了
|