本人刚从 java 、c#转过来,因为工作需要,这两天开始研究 python 工程。 (其实以前也接触过,但只限于会写些代码层次的基础语法) 现在新人有个疑惑,为什么 python 会有.venv 这种概念,资料说是项目编译环境隔离,每个项目有自己的解释器环境什么的。其实这种给每个项目搞内环境部署,很像是 java 开发里给每种服务的 docker 容器都单独打包一个独立的 jdk ? Python, venv, Java, 解释器
Python 解释器的执行需要依赖环境(你导入的各种包),每个项目需要的环境不一样,为了避免冲突就隔离出来。而 Java 和 C#可以将环境编译到目标文件里,没有这种问题。同理 node.js 也有 node_package 。
你们 java 也有 classpath 这个概念啊,稍微现代点的语言配套的依赖管理哪个没有这种版本隔离设计? 你写 java 时候所有依赖都会扔进全局$CLASSPATH 吗? 无非只是 Python 处理 classpath 简单粗暴一点,按 java 的理解方式,直接创建一个新的 JAVA_HOME ,然后 java 复制一份进去,然后再把然后依赖扔进去。 本质都是为了去隔离依赖,只是 java 生态里( maven 、gradle 之类的)没这么简单粗暴而已。 如果你想知道为什么要隔离依赖,1 防止依赖冲突 2 方便部署,就是这么简单。