为什么 Python 的包管理这么难用,比 node 的 npm 难用一万倍,每次进入项目都要手动执行一下 conda activate xxx,难道就没有默认的 Python 项目级别的依赖吗?

21 天前
 arnoldnuo

chatgpt 也没给一个实用的方案,你们都是怎么管理自己的 python 环境的?

8019 次点击
所在节点    Python
77 条回复
treblex
21 天前
UV 有本地梯子还行,上服务器更麻烦了,哎
Aprdec
21 天前
..venv 不也得激活环境吗 楼上和 conda 有啥区别 楼主不就是嫌麻烦吗
longredzzz
21 天前
给项目配一下 direnv 实现 shell 自动激活环境。
python 环境管理我用 pixi,能管理 conda 包 和 pypi 包
craftsmanship
21 天前
UV 你值得拥有
skuuhui
21 天前
自从用 AI 编程,从来没有在命令行输入过 python 相关命令了
reoah2
21 天前
windows 下 vscode 打开 terminal 会自动执行:./venv/Scripts/Activate.ps1 ,一进 terminal 就是虚拟环境了,这很好用啊
wuruxu
21 天前
apt-get 想要什么包都有
coreJK
21 天前
从开始学 python 使用自带的 venv 到现在
pyenv ,pix ,pdm ,uv 都用过了,分享一点点心得吧

半自动
1. pyenv: 管理多版本的 python 环境好手,windows 和 ubuntu 中都可以实现方便的多版本切换,但是要注意和其他修改环境变量的程序(比如 ros 机器人开发框架),但是也得科学上网的情况下用,不然容易卡在下载 python 安装包的时候

2. pipx: 这个可以理解是,用来管理用 python 开发和发布的一些工具管理,比如 labelme ,youtube dowload 这类工具,可以独立成一个系统工具(其实还是建立了一个虚拟环境,然后再在这个独立的环境安装了工具,避免污染系统的 pip 环境依赖)

往“全自动”方向发展
3.pdm: 在他之前还有一个 poetry ,能够管 python 一整个开发周期(版本管理、环境管理、依赖管理、打包 whl 分发),pdm 有一点比 uv 方便,他管理的依赖可以跨平台,在写 pyqt 的时候,loguru 模块在 win 和 linux 环境下会到一个 win32ctime 模块,pdm 默默的做了模块区分系统环境的事情,帮我节省了很多(我尝试用 uv 重新管理这个项目,结果出现了模块依赖的问题,uv 好像也有区分的办法,需要自己编写目前,我用得还不熟 XD )

4.uv: 非常快,做的事情和 pdm 、poetry 差不多,也是为了能够管理整个开发周期,还可以做 pipx 做的事情,管理一些开发工具

pdm 、和 uv 一定要注意他们的缓存,空间不够很可能爆目录目录...,
本人也还在摸索和在实际工作中使用,才学疏浅,大佬们指正
coreJK
21 天前
补充一点,pdm 和 uv 都可以针对特殊的 pytorch 类的包(包括但不限于),专门分配对应的 index
版主应该最容易遇到的是这个问题,和 pytorch 有关的,现在可以参考这两个工具的方案

1. uv 的方案:https://uv.oaix.tech/guides/integration/pytorch/?h=pytorch
2. pdm 的方案: https://pdm-project.org/zh-cn/latest/usage/config/#_5
kneo
21 天前
python 和 node ,人称依赖管理界的卧龙凤雏。现在 node 说我的 npm 比你好用一万倍,说完自己都笑了。
liu938651469
21 天前
pyenv 任意 py 版本 再和 uv 配合好了
est
21 天前
与其说是 py 的包管理烂,不如说 py 是 C 库的附庸。

py 的所有包管理机制烂的根源就是 .so .dll 不好管理导致的。还有一些逆天玩意是源码分发,你就可劲儿折腾吧。

你觉得 npm 好用,那是因为手没伸到这么长而已。纯 .js 包有啥好管理的。
litchinn
21 天前
npm 感觉半斤八两,工具越多的一般越难用,典型的如 pip 和 npm ,人们分别继续开发了 venv ,conda ,yarn ,pnpm...
现在 python 的版本答案是 uv
感觉包管理最好的就是 cargo 了
viking602
21 天前
建议使用 uv
jsq2627
21 天前
@kneo pnpm 已经把 npm 的不足都修正了。现在 pnpm/npm 的问题是,js 生态碎片化,很多简单的功能都要发 npm 包,导致一个项目有成千上万依赖。
Suaxi
21 天前
conda 我是一个项目一个 env ,就首次安装的时候 active 一下,也还行
1daydayde
21 天前
#9 可以满足临时的小脚本项目
,如果你依赖多,那么可以用 uv 来管理,在初始化项目的时候安装速度不比 npm 快一万倍?
huijiewei
21 天前
别提 npm 了,被攻击的生活不能自理了都
wu67
21 天前
venv 呀...以我自己玩的 fastapi 为例

python3 -m venv venv

Makefile 里面写好:
VENV_ACTIVATE = . venv/bin/activate

dev:
写个 tab 在这$(VENV_ACTIVATE) && uvicorn main:app --reload --host 0.0.0.0 --port=3000

然后手动写好 requirements.txt, 执行:
pip install -r requirements.txt

启动的时候跑 make dev 就行了, ctrl c 终结命令的时候, 会自动退出虚拟环境
uni
21 天前
gpt 竟然没有给你 uv ?这有点出乎我意料

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

https://ex.noerr.eu.org/t/1174867

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

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

© 2021 V2EX