必须用 source 激活,因为 activate 是 shell 脚本,需在当前 shell 中执行以修改 path、virtual_env 和 ps1;直接运行会启子 shell,退出即失效。

source 命令是 macOS 上激活 Python 虚拟环境的唯一正确方式,不是 ./venv/bin/activate,也不是双击运行——后者根本不会生效。
为什么必须用 source 激活?
macOS 终端(zsh/bash)默认不执行可执行脚本,只认「加载并执行 shell 代码」。虚拟环境里的 venv/bin/activate 是一个 shell 脚本,它靠修改 PATH、设置 VIRTUAL_ENV、重写提示符 PS1 来完成隔离,这些操作必须在当前 shell 进程中运行才有效。
直接运行 venv/bin/activate 会新开一个子 shell,退出后一切还原,看似“激活”了,实则没变。
-
source venv/bin/activate—— 正确:在当前 shell 中读取并执行脚本 -
./venv/bin/activate—— 错误:启动子 shell,退出即失效 -
venv/bin/activate(无 source)—— 报错:command not found
venv 目录名选 .venv 还是 venv?
推荐用 .venv(点开头),原因很实际:
- VS Code、PyCharm 等 IDE 默认自动识别
.venv为项目虚拟环境,无需手动指定解释器路径 -
.venv天然被.gitignore的通用规则忽略,避免误提交(venv/需要你额外加一行) - 创建命令就是
python3 -m venv .venv,和venv完全一样,无额外成本 - 激活命令也一致:
source .venv/bin/activate
激活后怎么确认真的成功了?
别只看终端前缀是否出现 (.venv)——这个提示可以被 PS1 设置干扰或残留。真正可靠的验证方式只有两个:
- 运行
which python,输出路径必须包含.venv/bin/python或venv/bin/python,不能是/usr/bin/python3或/opt/homebrew/bin/python3 - 运行
pip list,结果应只有pip、setuptools、wheel(最多再加个pip-tools类工具),如果看到numpy、requests等一堆包,说明你可能误用了--system-site-packages,或者根本没激活成功
常见失败场景和对应解法
激活命令执行后没反应、没括号、which python 仍是系统路径?先排查这几个硬性条件:
- 确保你在项目根目录下执行
source .venv/bin/activate,路径错一个字符(比如多空格、少点)都会报No such file or directory - 确认
.venv文件夹确实存在且非空,里面必须有bin/activate;若用python3 -m venv .venv创建失败,可能是 Python 版本太老(低于 3.3)或权限异常 - 如果你用的是 zsh(macOS Catalina 及以后默认),检查是否在
~/.zshrc里误加了覆盖PATH的配置,导致source后又被重置 - 某些终端插件(如 oh-my-zsh 的 virtualenv 插件)会干扰提示符显示,但不影响实际功能——以
which python为准
source 一遍。把它当成开关,而不是后台服务。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











