为什么 Python 、Node.js 就不能学习一下 C#这种优雅的依赖管理方式?

172 天前
 drymonfidelia

node_modules 每个项目都有几个 GB ,这站里大部分都是前端,应该都懂,不用多说了

最近发现 Python 的 venv 也超大,并且比 Node.js 还离谱,每个项目的 venv 里都还会复制一遍 python 解析器

为什么就不能像.NET 的 NuGet 一样,把依赖都按版本放在一起?放在项目目录里,还要配置版本管理排除

NuGet 的包缓存目录里有版本号,不同依赖版本不会冲突

7761 次点击
所在节点    程序员
79 条回复
thoo61871
171 天前
怎么最近那么多吹 C 井的
Al0rid4l
171 天前
@thinkershare 为什么需要? 官方知道会有你这样的人来问, 所以已经给你回答了 https://devblogs.microsoft.com/nuget/enable-repeatable-package-restores-using-a-lock-file/#why-use-a-lock-file
anzu
171 天前
初始的 venv 并不大,我 python3.9 的 venv 只有十几 MB 。即使我安装了 opencv-python 和 numpy 也只有 185MB 。如果很大,你需要用 pip list 检查一下是否安装了多余的包。
python 的哲学就是 simple is better. venv 虚拟环境完全隔离,与其它的东西毫无关联。删除也是简单地删除文件。
Al0rid4l
171 天前
@LitterGopher 有的, 叫作 dotnet add 和 dotnet restore, 分别对应添加单个依赖和安装所有依赖, 不过后者通常不会用到, 因为 build 等非常多的命令会默认执行一次 restore 以至于基本上不会用到 restore 这个命令

还有一部分情况是, .NET 的人大多用 vs, 鼠标点点就装完了根本不知道有这些东西
jiangzm
171 天前
@maocat #26 人心中的成见是一座大山
jqtmviyu
171 天前
有了 uv, python 总算能用了. 之前的体验差 pnpm 太多.

现在还有个问题, 为啥还得自己激活 venv, 就不能配置自动激活吗? 把这串 `source $PWD/.venv/bin/activate` 加到 alias 或者用 direnv, 还是很不方便.
DOLLOR
171 天前
@thoo61871 最近 tsc 计划要移植到 go 嘛,c# 有点不服气了🐶
lambdaq
171 天前
拿 C# 和 maven 对标的其实压根不懂

纯 py 代码没有任何依赖管理问题。你甚至直接把包复制到 PYTHONPATH 下就能跑。py 的依赖管理都是 .so 扩展导致的。

对应 C# 你需要解决的是 winsxs 那一堆 COM 接口的组件依赖问题

对饮 Java 是 JNI 。

我不觉得 C# / Java 解决了这个问题。
UnluckyNinja
171 天前
pnpm 和 bun 都是 hard link ,除了 ci 应该没人用 npm 来安装依赖了,这个问题有点“先问是不是,再问为什么”的问题
eBPF
171 天前
@c0t +1 ,uv+typing 让我对 py 有了很大改观
guanzhangzhang
171 天前
@ipwx 信创很多客户不能联网,还是静态编译好些,有 cve 了换二进制就行,不然就像升级 sshd openssl 把 glibc 搞崩了的
minottomie4383
171 天前
别的不知道,OS 配置一下,鄙视链走起来
nixpkgs.overlays = [
(final: prev:
builtins.listToAttrs (map (name: {
inherit name;
value = throw "FK ${name} !";
}) (builtins.filter (name: builtins.match "nodejs.*" name != null) (prev.lib.attrNames prev)))
)
];
harlen
171 天前
@chengyiqun 打包用 nultka
harlen
171 天前
@darktutu uv com 啥可以直接生成,写个流,提交的时候直接自动生成
mayli
171 天前
之前 venv 的确是,现在 uv 用 hardlink ,明显少很多了。
nodejs py 问题是包管理器其实都是野生手搓,核心就是能用就行。
直到最近才出现一些比较优化的工具。
C02TobNClov1Dz56
171 天前
@harlen #53 是 Nuitka 不是 Nultka
LaTero
171 天前
@Al0rid4l 微软文档是真的烂,不知道为什么国内这么多人吹。学 Unity 的时候查 C#的文档简直绝望,所有微软产品的文档都是一股脑塞在一起,根本猜不到想要的信息会被拆到哪个分类里,搜索也不能限定 C#,只能限定到 dotnet ,然后搜索结果全是什么 excel api 之类的。
kakki
171 天前
吵起来了,我就想看这个,maven 的管理不知道高到哪里去了
Trim21
171 天前
不能理解 lockfile 的意义的就别参与包管理器话题了...
Trim21
171 天前
@jqtmviyu #45 你直接 uv run 不就行了

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

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

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

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

© 2021 V2EX