虚拟环境(Virtual Environment) 是 Python 提供的一种机制,用于在一台机器上创建多个相互独立的 Python 运行环境。它解决了 项目间依赖冲突 和 版本管理混乱 的问题,是现代 Python 项目开发的必备工具。一个虚拟环境中大体包含以下三点内容:
独立的 Python 解释器
每个虚拟环境都会复制一份指定版本的 Python 解释器。这样就可以在同一台机器上同时使用不同版本的 Python。
独立的依赖包目录
每个虚拟环境都有自己的 site-packages 文件夹,存放安装的第三方库,不会与全局 Python 冲突。
独立的环境变量/配置
例如 PATH、PYTHONPATH 等变量只在当前虚拟环境中生效,退出后不会污染全局环境。
避免依赖冲突
不同项目可能依赖不同版本的库,比如项目 A 依赖 Django 2.x,项目 B 依赖 Django 3.x。虚拟环境可以让它们共存。
保证可复现性
虚拟环境可以通过 requirements.txt 锁定依赖,确保在不同机器上重现一致的运行环境。
简化部署
在开发环境和生产环境使用相同的虚拟环境,可以减少 “在我机器上能跑,在服务器上却报错” 的问题。
bash# MAC:查看当前python版本
python3 --version
# windows/pyenv创建的作用域中
python --version
# 创建虚拟环境,结合pyenv使用
python -m venv /path/to/new/virtual/environment
或
python3 -m venv /path/to/new/virtual/environment
参数说明:
Linux / macOS
mdyour-project/ └─ .venv/ ├─ bin/ # python、pip、激活脚本等 ├─ include/ ├─ lib/pythonX.Y/site-packages/ ├─ pyvenv.cfg └─ share
Windows
mdyour-project\ └─ .venv\ ├─ Include\ ├─ Lib\site-packages\ ├─ Scripts\ # python.exe、pip.exe、激活脚本等 └─ pyvenv.cfg
bash# Linux激活命令(激活后查看)
source .venv/bin/activate
# 退出虚拟环境命令
deactivate
# Windows激活命令
.venv\Scripts\activate
# 退出
deactivate
# 确认版本与位置
python -V
which python # Linux/macOS
where python # Windows
zsh# 在激活的环境中,使用 pip 安装的包只会影响当前环境 pip install selenium # 查看已安装的包 pip list # 在进入项目的根目录并创建requirements.txt文件 # Linux cd /preject touch requirements.txt ls # windows cd /d e:\project cd.requirements.txt dir # 导出依赖 pip freeze > requirements.txt # 查看依赖文件是否导入 # Linux cat requirements.txt # windows type requirements.txt # 从文件安装依赖 pip install -r requirements.txt # 要删除虚拟环境(确保已退出环境) # Linux/macOS rm -rf .venv # Windows (命令提示符) rmdir /s /q .venv
bash# MAC:查看当前python版本
python3 --version
# windows/pyenv创建的作用域中
python --version
# 下载virtualenv
pip install virtualenv
# 查看解释器位置
pyenv prefix # Linux
# 创建虚拟环境(指定python版本解释器)
python -m virtualenv -p /.pyenv/versions/2.7.18/bin/python3.9 /Library/Environment/Env
python -m virtualenv /Library/Environment/Pk2.7.18 # 在目标版本的python环境中创建虚拟环境
bash# Mac系统pyenv install 2.7.18 报错:
ERROR: The Python zlib extension was not compiled. Missing the zlib?
# 在 Mac 上,Python 编译需要依赖一些库(zlib, openssl, readline, xz, bzip2 等)。
# 你需要先安装它们:
brew update
brew install zlib bzip2 readline xz openssl
# 告诉 pyenv 编译时去哪里找 zlib:Homebrew 安装的库不一定在系统默认路径下,所以需要在 pyenv install 时传环境变量
export LDFLAGS="-L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib -L$(brew --prefix xz)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib"
export CPPFLAGS="-I$(brew --prefix zlib)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix xz)/include -I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include"
export PKG_CONFIG_PATH="$(brew --prefix zlib)/lib/pkgconfig:$(brew --prefix bzip2)/lib/pkgconfig:$(brew --prefix xz)/lib/pkgconfig:$(brew --prefix readline)/lib/pkgconfig:$(brew --prefix openssl)/lib/pkgconfig"
# 重新安装2.7.18
pyenv install 2.7.18
# 安装是否成功验证
pyenv versions
bash# windows系统安装2.7.8后,pip list报错:
LookupError: unknown encoding: cp65001
# 因为 Windows 的终端默认编码是 cp65001 (UTF-8),而 Python 2.7.10 对这个编码支持不好,结果导致 pip 启动失败。
# 修改环境变量,强制 Python 使用 UTF-8在 CMD 中运行:
setx PYTHONIOENCODING utf-8
# 验证是否生效
pip -V
# 安装virtualenv
python -m pip install virtualenv
参数说明:
Linux / macOS
mdEnv/ ├── bin/ # 可执行文件 ├── include/ ├── lib └─ pyvenv.cfg
Windows
mdEnv/ ├── Include/ ├── Lib ├── libs ├── Scripts # 可执行文件 ├── .gitignore └─ pyvenv.cfg
提示
不同版本的virtualenv创建的虚拟环境中目录结构并不一致,如py3中安装的virtualenv 生成的虚拟环境中包含 CACHEDIR.TAG (缓存标识文件,virtualenv 特有),而我在py2中安装的virtualenv所生成的虚拟环境中并无该文件。
bash# Linux激活命令(激活后查看python版本与包环境是否隔离)
source .venv/bin/activate
python --version
pip list
# 退出虚拟环境命令
deactivate
# Windows激活命令
.venv\Scripts\activate
# 退出
deactivate
# 确认版本与位置
python -V
python prefix # Linux/macOS
where python # Windows
bash# 方法一
# 直接给出解释器完整路径(但是不要用py3的virtualenv来调py2的解释器创建py2的虚拟环境,因为它在执行过程中会用到 * unpack 这种语法特性(Python 3 里合法,Python 2 不认识),结果它尝试去调用 Python 2.7 的解释器时就会报错)
virtualenv -p /Users/${username}/.pyenv/versions/3.9.1/bin/python3.9 Pk3.9
# 方法二 (跨版本(Python 2 / 3)创建虚拟环境)
# 安装 pyenv-virtualenv 插件,用 SSH 方式克隆
git clone git@github.com:pyenv/pyenv-virtualenv.git \
$(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc # 配置~/.zshrc
source ~/.zshrc # 刷新配置
# 假设你已经有 Python 2.7.18(通过 pyenv install 2.7.18 装的),就可以直接:
pyenv virtualenv 2.7.18 pk2.7
# 这会在 ~/.pyenv/versions/ 目录下创建一个 独立虚拟环境
ls ~/.pyenv/versions/ # 查询结果:2.7.18 3.10.7 3.9.1 pk2.7
# 激活与切换虚拟环境
pyenv activate pk2.7 # 临时切换虚拟环境
pyenv deactivate # 退出环境
pyenv local pk2.7 # 在项目目录下,运行该命令后,以后进入该目录时,就会自动切换到这个虚拟环境。
提示
zsh# 在激活的环境中,使用 pip 安装的包只会影响当前环境 pip install selenium # 查看已安装的包 pip list # 在进入项目的根目录并创建requirements.txt文件 # Linux cd /preject touch requirements.txt ls # windows cd /d e:\project cd.requirements.txt dir # 导出依赖 pip freeze > requirements.txt # 查看依赖文件是否导入 # Linux cat requirements.txt # windows type requirements.txt # 从文件安装依赖 pip install -r requirements.txt # 要删除虚拟环境(确保已退出环境) # Linux/macOS rm -rf .venv # Windows (命令提示符) rmdir /s /q .venv
bash# Mac系统
# 下载
pip install pipenv
# 进入项目目录下,创建虚拟环境
pipenv --python /Users/${username}/.pyenv/versions/3.9.1/bin/python3.9
# 激活虚拟环境
pipenv shell
# 退出虚拟环境
exit/deactivate
# windows系统
# 下载
pip install pipenv
# 进入项目目录下,创建虚拟环境,用过pyenv安装的python解释器通常在“C:\Users\Administrator\.pyenv\pyenv-win\versions\”目录下
pipenv --python C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\python.exe
# 激活虚拟环境
pipenv shell
# 退出虚拟环境
exit/deactivate
venv --- 虚拟环境的创建
Python 虚拟环境的创建(venv)
Python 包管理工具 uv 使用教程
https://github.com/astral-sh/uv
python多环境管理(venv与virtualenv)
pipenv 入门教程
本文作者:精卫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!