一、💡 一句话理解
核心结论
.venv是当前 Python 项目专属的“依赖隔离区”。它让项目使用自己安装的库和 Python 命令,避免与电脑全局环境、其他项目的库版本互相影响。
在 PyCharm 的项目树里看到 .venv,通常说明这个项目已经创建了自己的虚拟环境。它不是业务代码目录,而是开发运行环境的一部分。
如果你还在熟悉变量、函数等语言写法,可以先阅读 03.Python基础语法;.venv 解决的是“代码要由哪套 Python 和依赖来运行”的问题。
二、🧭 理论:它是什么
2.1 .venv 与 venv
venv 是 Python 标准库中用于创建虚拟环境的模块;.venv 只是大家约定俗成的目录名。
例如,在项目根目录执行下面的命令,就会创建一个名为 .venv 的虚拟环境目录:
# 使用当前 python 创建项目专属的虚拟环境。
python -m venv .venv点号 . 让它在大多数文件管理器中显示为隐藏目录。这样做只是为了不让项目根目录显得杂乱,不是特殊语法;把目录取名为 venv、.python-env 也能正常工作。
2.2 为什么需要它
不同项目常常需要同一个库的不同版本。例如:
| 项目 | 所需依赖 |
|---|---|
| A 项目 | requests==2.28 |
| B 项目 | requests==2.32 |
如果两个项目都把依赖装到电脑的同一个全局 Python 中,后安装的版本可能覆盖先安装的版本,导致旧项目突然报错。
.venv 相当于给每个项目准备独立工具箱:项目 A、项目 B 和系统 Python 各自存放自己的依赖,互不干扰。
2.3 它不等于 Python 的完整副本
虚拟环境是基于某个已经安装好的 Python(称为基础 Python,base Python)创建的。
2.3.1 基础 Python 是什么
基础 Python 就是电脑上原本已经安装好的 Python。例如,在终端执行下面的命令:
# macOS / Linux 上常用的 Python 3 命令。
python3 --version输出的版本,例如 Python 3.12.x,对应的就是可用于创建 .venv 的基础 Python。
创建虚拟环境时,关系可以理解为:
电脑已安装的 Python(基础 Python)
↓ 使用 python3 -m venv .venv 创建
项目专用的 .venv
↓
项目专用的 Python、pip 和第三方库.venv 会使用该基础 Python 的版本和运行能力,但会保存当前项目自己的依赖。例如,基础 Python 是 3.12,执行 python3 -m venv .venv 创建的环境也会基于 Python 3.12 工作。
Python 官方文档说明:默认情况下,虚拟环境不会直接使用基础 Python 已安装的第三方包;只有明确装进 .venv 的包才会被使用。换句话说,基础 Python 是“母体”,.venv 是从它创建出来、供当前项目独立使用的小环境。
所以,.venv 重点保存的是:
- 项目使用的 Python 入口或链接;
- 当前项目的
pip; - 当前项目安装的第三方包;
- 环境配置文件。
你的 day1、day2、ai 等源码目录不应放进 .venv。
三、⚙️ 理论:它是怎么工作的
3.1 目录里通常有什么
在 macOS 和 Linux 中,常见结构如下:
pythonDemo/
├── .venv/
│ ├── bin/ # 此环境的 python、pip、activate 等命令
│ ├── lib/python3.x/
│ │ └── site-packages/ # 此项目安装的第三方库
│ └── pyvenv.cfg # 环境与基础 Python 的关联配置
├── day1/ # 你的学习代码
└── ...Windows 中对应的命令目录叫 Scripts/,库目录通常叫 Lib/site-packages/。
3.2 激活到底做了什么
激活(activate)不是启动一个新 Python,也不是必须步骤。它主要把 .venv/bin 临时放到终端命令搜索路径 PATH 的最前面。
激活前:python ──> 系统或其他环境的 Python
激活后:python ──> .venv/bin/python因此,激活后执行 python 和 pip,会自动使用 .venv 里的版本。Python 官方也说明:即使不激活,直接使用 .venv/bin/python 也可以运行该环境;激活只是更方便。
3.3 为什么不能随意复制或移动 .venv
环境内安装的命令通常会记录 .venv 中 Python 的绝对路径。把项目或 .venv 移到另一处后,这些路径可能失效。
移动项目后的处理方式
不要复制旧
.venv。删除旧环境,再在新位置创建一个,并根据依赖清单重新安装库,通常更可靠。
四、🚀 实践:从准备到验证
4.1 前置准备
先在终端确认 Python 可用:
# macOS 上常用 python3;若 python 已指向 Python 3,也可以使用 python。
python3 --version建议每个项目根目录只保留一个 .venv。PyCharm 创建项目时如果选择了 Project venv,通常会自动创建并选中它;无需再用命令行重复创建。
4.2 在 PyCharm 新建项目时创建 .venv

你截图中的配置已经基本正确,可以按下面的顺序操作:
-
在
Location中填写项目目录,例如/Volumes/data/pycharmProject/zhScripts。 -
Create Git repository表示同时初始化 Git 仓库,按需勾选;它与创建.venv没有直接关系。 -
Create a welcome script表示生成一个示例 Python 文件,也是可选项。 -
Interpreter type保持默认的Project venv。Interpreter type表示“PyCharm 要用哪种方式为项目准备 Python 解释器”。选择Project venv,就是让 PyCharm 为当前项目自动创建一套独立的 Python 虚拟环境,并用它运行项目代码。Interpreter:Python 解释器,也就是实际执行.py代码的程序;Project:这套环境只供当前项目使用;venv:Python 虚拟环境,用来隔离不同项目安装的第三方库。
结合截图中的配置,创建关系如下:
系统中已经安装的 Python 3.13 ↓ 作为基础 Python PyCharm 创建 zhScripts/.venv ↓ 设为项目解释器 运行 zhScripts 项目中的 Python 代码点击
CREATE后,PyCharm 会在项目根目录创建.venv,使用所选的 Python 版本生成环境,并将.venv中的 Python 设置为当前项目的解释器。它相当于替你执行下面的命令,并继续完成解释器配置:python3 -m venv .venv应该怎么选
对于普通 Python 项目,保持默认的
Project venv即可。只有打算使用已经存在的虚拟环境、Conda 或其他特殊环境时,才需要选择其他类型。 -
在
Python version中选择电脑上已经安装的基础 Python。截图中的 Python 3.13 可以直接使用。 -
确认界面提示的虚拟环境位置为项目根目录下的
.venv,例如:/Volumes/data/pycharmProject/zhScripts/.venv -
点击右下角
CREATE。
创建完成后,PyCharm 会自动完成两件事:
- 在项目根目录生成
.venv; - 把
.venv中的 Python 设置为当前项目的解释器。
也就是说,不用提前手动创建 .venv。你只需保持截图中的 Project venv 选项并点击 CREATE。
可以在 PyCharm 的终端中验证:
# 显示当前终端使用的 Python 路径。
which python
# 显示 Python 解释器的完整路径。
python -c "import sys; print(sys.executable)"如果输出路径包含 /zhScripts/.venv/bin/python,就说明创建并配置成功。若终端没有自动使用它,可先执行:
source .venv/bin/activate已经创建了项目怎么办
不需要重新建立项目。打开 PyCharm 的 Python Interpreter 设置,选择添加本地解释器并新建
Virtualenv,将环境位置设为当前项目下的.venv,再选择基础 Python 即可。
4.3 可以拿来干什么
4.3.1 为项目单独安装依赖
例如,当前项目需要发送 HTTP 请求时,先进入项目根目录并激活环境:
# macOS / Linux:激活名为 .venv 的虚拟环境。
source .venv/bin/activate
# 此时安装的 requests 只属于当前项目。
python -m pip install requests输入是安装命令;pip 会把 requests 放到 .venv 的 site-packages 中。其他项目不会自动获得这个库。
4.3.2 确认当前使用的是不是 .venv
# macOS / Linux:应显示项目中的 .venv/bin/python。
which python
# 查看当前环境已安装的包。
python -m pip list如果第一条命令的输出包含项目路径中的 .venv/bin/python,说明终端正在使用该项目的虚拟环境。
4.3.3 固化依赖,方便重建环境
# 在已激活的环境中,把当前安装的依赖及版本写入清单。
python -m pip freeze > requirements.txtrequirements.txt 是可以提交到 Git 的文本清单;.venv 本身通常不提交。以后重建环境后,可按清单恢复。
4.4 完整实践:代码、启动和验证
下面以 macOS 上的 pythonDemo 为例,演示从创建到验证的完整流程。请在项目根目录执行。
# 1. 创建 .venv;若你已通过 PyCharm 创建过,可跳过本步。
python3 -m venv .venv
# 2. 让当前终端优先使用 .venv 中的 python 和 pip。
source .venv/bin/activate
# 3. 升级当前环境的 pip,再安装示例依赖。
python -m pip install --upgrade pip
python -m pip install requests
# 4. 记录依赖,供其他电脑或未来重新创建环境时使用。
python -m pip freeze > requirements.txt接着在项目根目录新建 check_venv.py:
"""检查当前程序是否由虚拟环境中的 Python 运行。"""
import sys
# sys.prefix 是当前解释器的环境目录;
# sys.base_prefix 是创建该环境所依赖的基础 Python 目录。
is_venv = sys.prefix != sys.base_prefix
print(f"当前 Python:{sys.executable}")
print(f"当前是否在虚拟环境中:{is_venv}")运行并验证:
# 使用已激活环境中的 Python 运行检查脚本。
python check_venv.py预期结果类似:
当前 Python:/你的项目路径/pythonDemo/.venv/bin/python
当前是否在虚拟环境中:True完成后可执行下面的命令退出环境:
# 只影响当前终端窗口,不会删除 .venv。
deactivate4.5 常见问题排查
| 现象 | 常见原因 | 处理方法 |
|---|---|---|
ModuleNotFoundError | 包装到了全局 Python,当前 .venv 没有该包 | 激活 .venv 后执行 python -m pip install 包名 |
which python 没有 .venv | 未激活环境,或 IDE 解释器未选对 | 终端执行 source .venv/bin/activate;PyCharm 中选择项目的 .venv 解释器 |
| 项目移动后命令报错 | .venv 内保存的旧路径失效 | 删除 .venv,执行 python3 -m venv .venv,再执行 python -m pip install -r requirements.txt |
Git 出现大量 .venv 文件 | 没有忽略虚拟环境 | 在 .gitignore 中加入 .venv/ |
.gitignore 的最小配置:
# 虚拟环境可由 requirements.txt 重建,不提交到 Git。
.venv/五、📌 总结
.venv是项目专属的 Python 虚拟环境目录,不是业务源码。- 它解决的是“不同项目依赖版本互相冲突”的问题。
- 激活后,
python和pip会优先使用.venv中的版本;不激活也可直接指定.venv/bin/python。 .venv应加入.gitignore,不要提交、复制或搬运;用requirements.txt记录并重建依赖。- 在 PyCharm 中,确认项目解释器指向当前项目的
.venv,就能正常使用其中安装的库。