venv 激活唯一正确方式是 source bin/activate(linux/macos)或 scripts\activate.bat(windows),它通过修改环境变量使 python/pip 指向虚拟环境,而非启动服务或进程。

直接 source 激活脚本即可,不是运行 python 或启动服务 —— venv 本身没有“启动”概念,只有“激活”和“退出”两个明确状态。
source bin/activate 是唯一正确激活方式
venv 创建后生成的 bin/activate 是一个 shell 脚本,负责临时修改 PATH、PYTHONHOME 等环境变量,让后续命令(如 python、pip)自动指向虚拟环境内的副本。
- bash/zsh 用户必须用:
source myenv/bin/activate(不能写成./myenv/bin/activate或sh myenv/bin/activate,否则变量不会作用于当前 shell) - fish 用户需用:
source myenv/bin/activate.fish - 激活成功后,命令行提示符前会出现
(myenv)标识,且which python输出应为myenv/bin/python - 如果提示
No such file or directory,检查路径是否拼错,或确认myenv目录下是否存在bin/activate(某些最小化系统可能漏装python3-venv)
常见错误:把 venv 当成服务或进程去“启动”
有人会尝试 python myenv、python3 myenv/bin/activate、甚至 systemctl start myenv —— 这些全都不对。venv 不是可执行程序,也不是 systemd 服务。
-
python myenv:报错ImportError: No module named myenv,因为 Python 尝试把目录当模块导入 -
python3 myenv/bin/activate:脚本在子进程中执行,环境变量改了也白改,退出后一切还原 -
systemctl类操作:venv 无 service 文件,也不该被 systemd 管理;它只是开发/部署时的依赖隔离手段 - 真正需要“长期运行”的是你的 Python 应用(如 Flask 服务),它应在激活后的环境中用
python app.py启动
激活后必须立即升级 pip
新创建的 venv 自带的 pip 版本往往过旧(例如 Python 3.11 默认带 pip 22.x),而多数现代包(torch、pydantic、uv)要求 pip ≥ 23.0+ 才能正确解析依赖树。
- 激活后第一件事就是:
pip install --upgrade pip - 若卡住或超时,加参数:
pip install --timeout 60 --upgrade pip - 国内用户建议换源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade pip - 切勿在激活状态下用
sudo pip install—— 这会让包装进系统路径,破坏隔离性
最容易被忽略的是:激活只是 shell 层面的临时切换,关掉终端或新开一个 tab 就失效;如果你写自动化脚本或 CI 流程,别依赖交互式激活,而是用 myenv/bin/python 和 myenv/bin/pip 的绝对路径调用,更稳定、更可复现。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











