Python 虚拟环境 venv 的工作原理
发布时间 - 2026-01-30 00:00:00 点击率:次venv 通过符号/硬链接复用系统 Python 二进制和标准库,仅新建 pyvenv.cfg、bin/(或 Scripts\)和 lib/pythonX.X/site-packages/,启动时依据 pyvenv.cfg 的 home 路径加载内置模块,并以自身路径为 sys.prefix 确保包隔离。
venv 是怎么隔离 Python 解释器的
它不复制整个 Python 安装,而是用符号链接(Linux/macOS)或硬链接(Windows)复用系统 Python 的二进制文件和标准库,只新建 pyvenv.cfg、bin/(或 Scripts\)和 lib/pythonX.X/site-packages/ 三个关键部分。解释器启动时读取 pyvenv.cfg 中的 home = ... 路径,就知道该从哪加载内置模块;同时把自身所在目录设为 sys.prefix,让 site-packages 自动指向虚拟环境内的包目录。
为什么 pip install 后包只在 venv 里生效
因为 pip 被安装在虚拟环境的 bin/pip(或 Scripts\pip.exe),它内部硬编码了对应的 sys.executable 和 sys.prefix。执行时会把包解压/编译到 lib/pythonX.X/site-packages/,而这个路径不在系统 Python 的 sys.path 里。你手动激活后,PATH 优先找到的是虚拟环境里的 pip 和 python,没激活时调用的仍是系统版本。
- 不激活也能用:
/path/to/venv/bin/python -m pip install requests - 激活只是改
PATH和PYTHONHOME环境变量,不是魔法 -
pip list显示的包来源,取决于当前python解释器的site-packages路径
venv 和 conda、poetry 的根本区别在哪
venv 只管 Python 解释器和纯 Python 包的隔离,不碰编译器、C 库、非 Python 工具(如 gcc、node)。conda 是完整环境管理系统,能装不同版本的 Python、NumPy、CUDA 驱动甚至 R;poetry 侧重依赖解析与锁定,底层仍用 venv 或 virtualenv 做隔离。如果你项目依赖 numpy + ffmpeg + rustc,venv 本身解决不了后两者——它连 ffmpeg 装在哪都不知道。

因为 pyvenv.cfg 里记录了原始 home 路径,且部分可执行文件(尤其是 Windows 上的 python.exe)可能硬编码了解释器位置。拷贝后运行会报错:Could not find platform independent libraries 或直接闪退。正确做法是:在目标机器上重新运行 python -m venv new_venv,再用 pip install -r requirements.txt 重装。
- 跨平台拷贝必炸(比如 macOS 打包的 venv 放到 Linux 运行)
-
venv不包含 Python 解释器本体,只存路径引用 - 想“打包”环境,应该导出依赖:
pip freeze > requirements.txt,而不是打包整个目录
# linux
# python
# node
# windows
# 编码
# 工具
# mac
# macos
# 环境变量
# 解压
# win
# 虚拟环境
# virtualenv
# numpy
# pip
# conda
# ffmpeg
# 的是
# 它不
# 启动时
# 复用
# 加载
# 如果你
# 都不
# 尤其是
# 管理系统
# 是怎么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JS弹性运动实现方法分析
如何在阿里云部署织梦网站?
如何在服务器上配置二级域名建站?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
企业网站制作这些问题要关注
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何在香港服务器上快速搭建免备案网站?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
在centOS 7安装mysql 5.7的详细教程
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
如何确保西部建站助手FTP传输的安全性?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
如何利用DOS批处理实现定时关机操作详解
中山网站制作网页,中山新生登记系统登记流程?
如何确认建站备案号应放置的具体位置?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
在线制作视频的网站有哪些,电脑如何制作视频短片?
详解阿里云nginx服务器多站点的配置
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
html5的keygen标签为什么废弃_替代方案说明【解答】
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Java垃圾回收器的方法和原理总结
Laravel如何为API生成Swagger或OpenAPI文档
香港服务器部署网站为何提示未备案?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
智能起名网站制作软件有哪些,制作logo的软件?
制作企业网站建设方案,怎样建设一个公司网站?
如何在橙子建站上传落地页?操作指南详解
JavaScript数据类型有哪些_如何准确判断一个变量的类型
python中快速进行多个字符替换的方法小结
Android利用动画实现背景逐渐变暗
Python正则表达式进阶教程_复杂匹配与分组替换解析
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
网站优化排名时,需要考虑哪些问题呢?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
移动端脚本框架Hammer.js
Swift中swift中的switch 语句
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何安全更换建站之星模板并保留数据?
如何用花生壳三步快速搭建专属网站?
Java类加载基本过程详细介绍
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
如何挑选高效建站主机与优质域名?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】

