网易首页 > 网易号 > 正文 申请入驻

Python 标准库:venv(虚拟环境创建与管理)

0
分享至

venv 是 Python 标准库中用于创建虚拟环境的模块。它为项目提供独立的解释器入口和第三方包安装位置,便于分别管理不同项目的依赖,减少包版本冲突。

虚拟环境建立在已有 Python 安装之上,不会自动下载其他 Python 解释器,也不是独立的操作系统。使用时,应将项目代码与环境目录分开保存,并通过依赖清单记录环境的重建方式。

一、使用方式与适用范围

1、调用模块

venv 通常通过命令行使用:

python -m venv .venv

其中:

• python:执行创建操作的 Python 解释器。

• -m venv:以模块方式运行 venv。

• .venv:虚拟环境的保存目录。

venv 随 Python 提供,通常无需通过 pip 安装。部分 Linux 发行版将相关组件单独打包,缺少时需要通过系统包管理器补装。

2、主要应用

(1)项目依赖隔离

分别安装各项目需要的第三方包,避免所有项目共用一个包安装目录。

(2)依赖版本管理

为不同项目保留不同的包版本,减少升级某个包对其他项目的影响。

(3)开发与测试

在独立环境中试用新依赖、检查兼容性或验证安装过程。

(4)环境重建

根据项目代码与依赖清单,在其他位置重新建立运行环境。

3、与 pip 的分工

venv 负责创建环境,pip 负责在指定环境中安装和管理包。

基本流程为:

选择基础解释器 → 创建环境 → 使用环境解释器 → 安装依赖 → 运行项目

环境创建与包安装是两个步骤。创建虚拟环境后,OpenPyXL、python-docx 等第三方包仍需按项目需要安装。

二、核心概念与环境结构

1、基础解释器

基础解释器(Base Interpreter)是用于创建虚拟环境的已有 Python 解释器。

python -m venv .venv

该命令使用 python 当前指向的解释器创建环境。

如果需要使用另一套 Python,应明确调用那套解释器,而不是通过更改环境目录名选择版本。

在 Windows PowerShell 中,可使用解释器的完整路径:

& "C:\Python\python.exe" -m venv .venv

路径应替换为实际安装位置。PowerShell 中,执行带引号的程序路径需要使用调用运算符 &。

2、虚拟环境

虚拟环境(Virtual Environment)包含解释器入口、环境配置和独立的包安装目录。

默认情况下,基础环境中的第三方包不会自动对虚拟环境可见。不同虚拟环境也各自管理安装的包。

这种隔离主要针对 Python 解释器配置与包查找路径,不会隔离项目文件、网络或系统权限。

3、环境目录

.venv 是常用目录名,也可以使用其他名称:

python -m venv report_env

Windows 环境中的主要内容包括:

• pyvenv.cfg:记录基础 Python 等环境配置。

• Scripts:保存解释器入口、激活脚本和已安装命令。

• Lib/site-packages:保存第三方包。

macOS 和 Linux 通常使用 bin 保存解释器入口和脚本,第三方包位于 lib 下对应 Python 目录中的 site-packages。

这些内容由工具维护,不宜手动调整内部文件。

4、项目与环境的关系

建议将环境放在项目目录中,并与源代码并列:

• report_project/main.py:项目代码。

• report_project/requirements.txt:依赖清单。

• report_project/data:输入数据。

• report_project/output:输出结果。

• report_project/.venv:虚拟环境。

项目代码、数据和输出文件不应保存在 .venv 内部,以便环境删除后能够重新创建。

三、创建与确认环境

1、创建项目目录

以下命令可在 Windows 命令提示符或 PowerShell 中执行:

python -m venv .venv

macOS 和 Linux 中,创建时通常使用:

python3 -m venv .venv

命令完成后,项目目录中生成 .venv。

默认创建过程会安装 pip,但不会自动安装项目所需的第三方包。

2、确认基础解释器

创建前,可以检查当前解释器:

python -c "import sys; print(sys.executable)"

第一条命令显示 Python 版本,第二条命令显示解释器位置。

安装了多套 Python 时,应先确认所选解释器,再创建环境。环境名称本身不能说明其实际使用的解释器。

3、直接检查环境解释器

Windows:

.\.venv\Scripts\python.exe -c "import sys; print(sys.executable)"

macOS 和 Linux:

./.venv/bin/python -c "import sys; print(sys.executable)"

这些命令直接调用环境中的解释器,不要求事先激活。

4、检查 pip

Windows:

.\.venv\Scripts\python.exe -m pip --version

macOS 和 Linux:

./.venv/bin/python -m pip --version

输出会包含 pip 的版本及安装位置。安装位置应位于当前虚拟环境中。

四、激活、运行与退出

1、Windows PowerShell 激活

在项目目录中执行:

.\.venv\Scripts\Activate.ps1

激活后,终端提示符通常会出现 (.venv)。

如果 PowerShell 的脚本执行策略阻止激活,可以直接调用环境解释器,无需为运行项目而修改策略:

.\.venv\Scripts\python.exe main.py

2、Windows 命令提示符激活

在命令提示符中执行:

.venv\Scripts\activate.bat

PowerShell 与命令提示符使用不同的激活脚本,应根据实际终端选择。

3、macOS 与 Linux 激活

在 bash 或 zsh 中执行:

source .venv/bin/activate

其他 Shell 应使用对应的激活脚本。

4、激活的作用

激活脚本主要调整当前终端的环境变量,使环境中的解释器和命令优先被找到。

激活后,可以使用简短命令:

python -m pip list

激活不会将项目文件移入环境,也不会自动改变工作目录。

激活状态主要影响当前终端会话及其后启动的子进程。新开的终端通常需要重新激活,已经运行的程序也不会因此切换解释器。

5、确认实际运行环境

python -c "import sys; print(sys.executable); print(sys.prefix != sys.base_prefix)"

输出包括:

• 当前解释器的位置。

• 是否正在使用 venv 虚拟环境的判断结果。

对于 venv,sys.prefix != sys.base_prefix 为 True,表示当前解释器处于虚拟环境中。

提示符和 VIRTUAL_ENV 环境变量不能完全代替这一检查,因为直接调用虚拟环境解释器时也可以正常使用环境,而无需激活。

6、退出环境

在已经激活的终端中执行:

deactivate

该命令恢复当前终端激活前的相关设置,不会卸载包或删除环境。

关闭终端也会结束该终端中的激活状态。

五、依赖安装与检查

以下命令假定已激活目标环境;也可以将 python 替换为环境解释器的完整路径。

1、安装项目依赖

python -m pip install openpyxl python-docx

使用 python -m pip,可以明确由当前 Python 解释器运行 pip,减少解释器与 pip 不一致的问题。

安装完成后,可检查导入:

python -c "import openpyxl; import docx; print('依赖导入成功')"

包的安装名称与导入名称可能不同,例如安装 python-docx,代码中使用 import docx。

2、查看已安装的包

python -m pip list

查看某个包的详细信息:

python -m pip show openpyxl

输出中的安装位置可用于确认包是否安装在预期环境中。

3、升级与卸载

升级指定包:

python -m pip install --upgrade openpyxl

卸载指定包:

python -m pip uninstall openpyxl

升级会改变当前环境中的依赖状态。对于已经能够正常运行的项目,应在验证兼容性后更新依赖清单。

卸载某个包不一定会自动清理其安装时引入的全部依赖。

4、检查依赖关系

python -m pip check

该命令检查已安装包声明的依赖是否缺失或存在版本不兼容。

检查通过不代表程序逻辑和所有功能都已验证,仍需运行项目中的实际处理流程。

5、可选的 pip 更新

python -m pip install --upgrade pip

该命令更新当前环境中的 pip,需要能够访问所配置的软件包索引。

更新 pip 与升级 Python 解释器是不同的操作。

六、依赖记录与环境重建

1、导出依赖清单

在 Windows 命令提示符或 bash、zsh 中执行:

python -m pip freeze > requirements.txt

在 Windows PowerShell 中,可显式使用 UTF-8 输出:

python -m pip freeze | Out-File -Encoding utf8 requirements.txt

pip freeze 通常将已安装包及其版本输出为可供 pip 读取的依赖条目。

该命令记录当前环境状态,并不会自动判断哪些包是项目直接需要的。因此,宜在依赖明确的项目环境中导出。

2、依赖清单的范围

依赖清单用于记录包安装要求,但不是完整的运行环境副本。

它通常不能单独记录:

• Python 解释器本身。

• 操作系统及系统组件。

• 外部程序和驱动。

• 项目数据、配置与环境变量。

• 所有平台相关的安装条件。

pip freeze 生成的是已安装依赖的记录,不是能够保证跨平台完全一致的锁定结果。默认输出还会省略部分包管理工具。

3、在新位置重建环境

将项目代码和 requirements.txt 放到新位置后,重新创建环境。

Windows PowerShell:

.\.venv\Scripts\python.exe main.py

macOS 和 Linux:

./.venv/bin/python main.py

重建时,应选择符合项目要求的 Python 解释器。

如果依赖清单包含本地路径、可编辑安装或私有包源,还需要确保相关资源在目标环境中可用。

4、更新依赖记录

安装、升级或移除依赖后,应先确认项目运行正常,再更新清单。

对于需要长期维护的项目,可以分别记录:

• 项目直接依赖及允许的版本范围。

• 已验证环境中的具体安装版本。

前者便于表达项目要求,后者便于重建某次验证过的环境。

七、项目应用示例

1、准备环境

在项目目录中执行:

python -m venv .venv

Windows PowerShell 中直接安装依赖:

.\.venv\Scripts\python.exe -m pip install openpyxl python-docx

此流程不依赖激活状态。

2、编写处理程序

将以下代码保存为 main.py:

3、运行项目

Windows:

.\.venv\Scripts\python.exe main.py

macOS 和 Linux:

./.venv/bin/python main.py

程序在当前工作目录的 output 中生成:

• students.xlsx。

• report.docx。

虚拟环境提供第三方包,输出位置仍由程序中的路径设置决定。

4、记录项目依赖

验证结果后,使用同一环境导出依赖。

Windows PowerShell:

    Out-File -Encoding utf8 requirements.txt

这样可以避免将其他 Python 环境中的包误写入项目清单。

八、创建选项与程序接口

1、自定义提示名称

python -m venv .venv --prompt report

激活后,提示符通常显示为 (report)。

该选项只调整提示名称,不改变环境目录和解释器版本。

2、创建时更新基础依赖

python -m venv .venv --upgrade-deps

该选项在创建过程中更新基础包管理依赖,当前主要是 pip,需要访问软件包索引。

它不会安装或更新项目的全部第三方包。

3、允许访问基础环境的包

python -m venv .venv --system-site-packages

该选项允许环境访问基础 Python 的系统级包目录。

这会减弱环境的包隔离程度。需要清晰管理项目依赖时,通常保留默认隔离方式。

4、不安装 pip

python -m venv .venv --without-pip

该选项跳过 pip 初始化,适用于由其他工具统一管理包安装的情形。

一般入门项目无需使用。

5、清空目标后重建

python -m venv .venv --clear

--clear 会先删除目标环境目录中的内容,再创建环境。

它不同于普通的重复创建命令,应确保目标目录只保存可重建的环境文件。

6、解释器升级选项

python -m venv .venv --upgrade

该选项用于基础 Python 已在原位置升级后的环境调整,不会自动下载另一套 Python,也不是通用的跨版本迁移命令。

切换解释器版本时,重新创建环境并安装依赖通常更便于验证。

7、通过 Python 创建环境

EnvBuilder 用于通过程序创建或定制环境。

与命令行默认行为不同,使用该接口时需要显式设置 with_pip=True,才能要求初始化 pip。

创建完成不会自动激活调用程序所在终端,也不会切换当前正在运行的 Python 进程。

九、常用命令与接口速览

1、创建环境

python -m venv .venv

创建虚拟环境。

python -m venv .venv --prompt name

指定激活后的提示名称。

python -m venv .venv --upgrade-deps

创建环境并更新基础包管理依赖。

python -m venv --help

查看当前解释器支持的创建选项。

2、激活与退出

.\.venv\Scripts\Activate.ps1

在 Windows PowerShell 中激活。

.venv\Scripts\activate.bat

在 Windows 命令提示符中激活。

source .venv/bin/activate

在 macOS、Linux 的 bash 或 zsh 中激活。

deactivate

退出当前终端的激活状态。

3、环境检查

python -c "import sys; print(sys.executable)"

查看当前解释器位置。

python -m pip --version

查看当前 pip 及其安装位置。

python -m pip list

列出已安装包。

python -m pip check

检查已安装包声明的依赖关系。

4、依赖安装与记录

python -m pip install package_name

安装指定包。

python -m pip install -r requirements.txt

根据依赖清单安装。

python -m pip freeze

输出当前环境中的依赖记录。

python -m pip uninstall package_name

卸载指定包。

5、程序接口

venv.EnvBuilder(with_pip=True)

创建环境构建器。

builder.create(env_dir)

在指定目录创建环境。

十、使用注意事项

1、终端与开发工具的解释器

终端激活环境,不代表编辑器、调试器或 Notebook 已经使用同一解释器。

在开发工具中,应选择项目虚拟环境对应的解释器。Notebook 还需要确认当前内核。

发生“终端可以导入,但编辑器运行失败”等问题时,应分别检查实际执行位置的 sys.executable。

2、包安装位置

出现 ModuleNotFoundError 时,应先确认运行程序的解释器,再检查包是否安装在该环境中。

不要只根据安装命令曾经成功,就认定所有 Python 环境都能够导入该包。

使用环境解释器执行 -m pip,可以明确安装目标。

3、环境迁移

虚拟环境内部可能包含指向原位置和基础解释器的路径信息,不宜将整个环境目录直接复制到另一台设备或随意移动。

迁移项目时,应保留代码、数据及依赖清单,在目标位置重新创建环境。基础 Python 被卸载或路径发生变化后,也应检查并重建相关环境。

4、环境删除

删除前,应停止使用该环境的程序、调试会话或 Notebook 内核,并退出激活状态。

随后删除 .venv 目录即可,无需逐个卸载其中的包。

前提是项目代码和数据保存在环境目录之外。环境删除不会自动清理项目目录中的输出文件。

5、版本控制

项目代码和依赖清单应纳入版本控制,虚拟环境目录通常不应提交。

可在项目的 .gitignore 中加入:

.venv/

环境可以重新创建,代码、配置和必要的数据说明则需要单独保存。

6、隔离范围

venv 不提供虚拟机或容器级别的系统隔离,也不会限制程序访问当前用户能够访问的文件。

它解决的是 Python 项目依赖与解释器使用的组织问题。系统库、外部程序和硬件驱动仍需根据项目要求配置。

小结

venv 为项目建立独立的 Python 包环境。明确基础解释器、激活状态与实际运行解释器的关系,使用对应的 pip 管理依赖,并保留可重建的依赖记录,可减少环境冲突并提高项目维护效率。


“点赞有美意,赞赏是鼓励”

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
巴黎主席纳赛尔探望术后克瓦拉茨赫利亚,球员即将开始康复

巴黎主席纳赛尔探望术后克瓦拉茨赫利亚,球员即将开始康复

懂球帝
2026-10-29 03:31:37
山口百惠,该出手了

山口百惠,该出手了

我来我看见
2026-10-28 20:57:33
心梗与缺钾有关?医生:常吃牛奶鸡蛋,不如多吃这几物给心脏减负

心梗与缺钾有关?医生:常吃牛奶鸡蛋,不如多吃这几物给心脏减负

健康科普365
2026-10-28 19:25:09
价格大跌超50%!一度遭疯抢,黄金平替熄火,网友:赚了赶紧跑

价格大跌超50%!一度遭疯抢,黄金平替熄火,网友:赚了赶紧跑

21世纪经济报道
2026-10-28 23:51:25
正式退出!杨瀚森遗憾,开拓者官宣,赛季首次,名单公布,郭士强看懂

正式退出!杨瀚森遗憾,开拓者官宣,赛季首次,名单公布,郭士强看懂

喜欢体育的猫
2026-10-29 08:43:41
骑士121-111逆转奇才 球员评价:4人优秀,6人及格

骑士121-111逆转奇才 球员评价:4人优秀,6人及格

篮球资讯达人
2026-10-29 09:45:07
年少不知内存好!32GB DDR5内存两年疯涨14倍:从780元直接破万

年少不知内存好!32GB DDR5内存两年疯涨14倍:从780元直接破万

快科技
2026-10-29 10:13:03
央视八套今日放大招!早中晚三部大剧接力,剧荒救星来了

央视八套今日放大招!早中晚三部大剧接力,剧荒救星来了

乡野小珥
2026-10-29 10:44:24
美媒:特朗普承认万斯曾致信伊朗官员,称主要是为向伊方提供医疗物资

美媒:特朗普承认万斯曾致信伊朗官员,称主要是为向伊方提供医疗物资

环球网资讯
2026-10-29 08:26:21
今天才知道,这6种蔬菜最适合冷冻,冻1年不坏,营养还不流失

今天才知道,这6种蔬菜最适合冷冻,冻1年不坏,营养还不流失

阿龙美食记
2026-10-27 14:31:50
央视出手!姆巴佩再迎噩耗,解约仅是开胃菜,或将面临巨额赔偿

央视出手!姆巴佩再迎噩耗,解约仅是开胃菜,或将面临巨额赔偿

青梅侃史啊
2026-10-28 07:13:48
西藏发布会为遇难者默哀,现场全体起立,悼念遇难同胞;此次地震震级高、震源浅,震区平均海拔接近4800米

西藏发布会为遇难者默哀,现场全体起立,悼念遇难同胞;此次地震震级高、震源浅,震区平均海拔接近4800米

每日经济新闻
2026-10-28 21:53:41
学历贬值,日本的剧本已经演完了,我们几乎在逐页重演

学历贬值,日本的剧本已经演完了,我们几乎在逐页重演

起点人文
2026-10-15 13:07:03
比米饭还升糖的5种蔬菜,晚上尽量少吃,很多人天天当减肥菜吃。

比米饭还升糖的5种蔬菜,晚上尽量少吃,很多人天天当减肥菜吃。

鬼菜生活
2026-10-28 19:02:45
杨兰兰案今天开庭,她有钱、有车、有房,就是查不到她是谁

杨兰兰案今天开庭,她有钱、有车、有房,就是查不到她是谁

陈鹰
2026-10-29 08:39:23
易建联为妻儿建的洛杉矶豪宅烧成灰,如今2000平空地估价曝光,数字让人意外,中介爆出实情

易建联为妻儿建的洛杉矶豪宅烧成灰,如今2000平空地估价曝光,数字让人意外,中介爆出实情

LULU生活家
2026-08-31 15:33:38
20岁黄多多首秀翻车,可能黄磊孙莉也没想到,星二代如今不好混了

20岁黄多多首秀翻车,可能黄磊孙莉也没想到,星二代如今不好混了

嫹笔牂牂
2026-10-26 07:12:22
我国越来越多的人患脑梗?建议:停止食用“5物”,保护大脑

我国越来越多的人患脑梗?建议:停止食用“5物”,保护大脑

小杨说事情
2026-10-29 12:05:08
降温后发现,这3种“大妈色”尽量别穿了,显老土气,油腻感十足

降温后发现,这3种“大妈色”尽量别穿了,显老土气,油腻感十足

时尚穿搭生活馆
2026-10-27 23:20:29
我国将被淘汰的四样电器,千万别买了,尤其第2个,你家可能就有

我国将被淘汰的四样电器,千万别买了,尤其第2个,你家可能就有

辉哥说动漫
2026-10-28 16:07:20
2026-10-29 13:43:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2259文章数 85关注度
往期回顾 全部

科技要闻

MacBook终于能触屏了:22999元起

头条要闻

泽连斯基:我们愿进行任何形式谈判 乌不想失去美支持

头条要闻

泽连斯基:我们愿进行任何形式谈判 乌不想失去美支持

体育要闻

普通人徐嘉余的入口与出口

娱乐要闻

李嘉格自曝离婚内情:过错方净身出户

财经要闻

“对不起,我们不投具身智能了”

汽车要闻

首销期权益价23.98万起 2026款理想i6上市

态度原创

房产
艺术
游戏
手机
数码

房产要闻

12.1亿!三亚挂出重磅宅地!

艺术要闻

16岁开始打工,40岁拿影后,她早就该火了

GTA6地图面积正式公布!GTA4+5+荒野大镖客2总和

手机要闻

内存涨价带火二手手机!99新手机成华强北抢手货 iPhone 15 Pro Max逆势涨500

数码要闻

2026年中国电视出货量预计创17年新低 同比下降7.7%

无障碍浏览 进入关怀版