2025-08-26
Python基础
00
请注意,本文编写于 116 天前,最后修改于 114 天前,其中某些信息可能已经过时。

目录

前言
为什么需要虚拟环境
常见虚拟环境工具介绍
1. venv --- 虚拟环境的创建
1. 创建虚拟环境命令
2. 创建后的目录结构
3. 激活 / 退出
4. 使用虚拟环境
2. virtualenv --- 虚拟环境的创建(以py 2.7.18为例)
1. 创建虚拟环境命令
2. Mac系统与windows系统下载2.7.18期间遇到的问题与解决
Mac系统安装2.7.18问题
windows系统安装2.7.18问题
3. 创建后的目录结构
3. 激活 / 退出
4. 使用virtualenv 指定python解释器配合(pyenv)
4. 使用虚拟环境(以requirements.txt文件举例进行依赖管理)
3. Pipenv --- 虚拟环境(py3.6+)的创建(Pipenv最强大的功能是依赖管理,这部分后续讲解)
1. 创建虚拟环境命令
参考资料:

前言

 虚拟环境(Virtual Environment) 是 Python 提供的一种机制,用于在一台机器上创建多个相互独立的 Python 运行环境。它解决了 项目间依赖冲突 和 版本管理混乱 的问题,是现代 Python 项目开发的必备工具。一个虚拟环境中大体包含以下三点内容:

  • 独立的 Python 解释器
    每个虚拟环境都会复制一份指定版本的 Python 解释器。这样就可以在同一台机器上同时使用不同版本的 Python。

  • 独立的依赖包目录
    每个虚拟环境都有自己的 site-packages 文件夹,存放安装的第三方库,不会与全局 Python 冲突。

  • 独立的环境变量/配置
    例如 PATH、PYTHONPATH 等变量只在当前虚拟环境中生效,退出后不会污染全局环境。

为什么需要虚拟环境

  • 避免依赖冲突
    不同项目可能依赖不同版本的库,比如项目 A 依赖 Django 2.x,项目 B 依赖 Django 3.x。虚拟环境可以让它们共存。

  • 保证可复现性
    虚拟环境可以通过 requirements.txt 锁定依赖,确保在不同机器上重现一致的运行环境。

  • 简化部署
    在开发环境和生产环境使用相同的虚拟环境,可以减少 “在我机器上能跑,在服务器上却报错” 的问题。

常见虚拟环境工具介绍

  • venv(标准库内置):Python 3.3+ 自带,轻量级虚拟环境工具。
  • virtualenv:比 venv 功能更丰富,支持 Python2/3,比 venv 灵活,兼容老版本 Python。
  • pyenv + virtualenv:既能切换 Python 版本,又能隔离依赖,适合同时维护多个项目。
  • pipenv:集成了 虚拟环境 + 包管理,自动生成 Pipfile 和 Pipfile.lock。
  • Poetry:包管理 + 虚拟环境管理一体化,使用 pyproject.toml 管理依赖。
  • Conda:跨语言包管理器,很重。
  • uv:超高速 Python 包和项目管理工具。

1. venv --- 虚拟环境的创建

1. 创建虚拟环境命令

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

参数说明:

  • python:指定用于创建虚拟环境的 Python 解释器,配合pyenv。
  • -m venv:运行标准库里的 venv,创建隔离环境。
  • /path/to/new/virtual/environment:目录不存在会被创建、目录存在但非空时,某些内容会被就地创建/覆盖(谨慎);可用 --clear 先清空。

2. 创建后的目录结构

Linux / macOS

md
your-project/ └─ .venv/ ├─ bin/ # python、pip、激活脚本等 ├─ include/ ├─ lib/pythonX.Y/site-packages/ ├─ pyvenv.cfg └─ share

Windows

md
your-project\ └─ .venv\ ├─ Include\ ├─ Lib\site-packages\ ├─ Scripts\ # python.exe、pip.exe、激活脚本等 └─ pyvenv.cfg

3. 激活 / 退出

bash
# Linux激活命令(激活后查看) source .venv/bin/activate # 退出虚拟环境命令 deactivate # Windows激活命令 .venv\Scripts\activate # 退出 deactivate # 确认版本与位置 python -V which python # Linux/macOS where python # Windows

4. 使用虚拟环境

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

2. virtualenv --- 虚拟环境的创建(以py 2.7.18为例)

1. 创建虚拟环境命令

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环境中创建虚拟环境

2. Mac系统与windows系统下载2.7.18期间遇到的问题与解决

Mac系统安装2.7.18问题

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

windows系统安装2.7.18问题

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

参数说明:

  • 如果你用 py -2.7.18 -m pip install virtualenv 安装的,那么直接 virtualenv Env 通常会得到 2.7.18 的环境(因为Python 2.7.9及以后的版本才内置了pip,且Python 2.7.18内置 pip 9.0.1较为稳定,所以这里以Python 2.7.18举例)。
  • 结合 pyenv/pyenv-win:先切到目标版本(pyenv local 2.7.18 / pyenv shell 2.7.18),再运行virtualenv Env,直接创建对应Python版本的虚拟环境,省去查看指定版本python解释器的路径(推荐)。

3. 创建后的目录结构

Linux / macOS

md
Env/ ├── bin/ # 可执行文件 ├── include/ ├── lib └─ pyvenv.cfg

Windows

md
Env/ ├── Include/ ├── Lib ├── libs ├── Scripts # 可执行文件 ├── .gitignore └─ pyvenv.cfg

提示

不同版本的virtualenv创建的虚拟环境中目录结构并不一致,如py3中安装的virtualenv 生成的虚拟环境中包含 CACHEDIR.TAG (缓存标识文件,virtualenv 特有),而我在py2中安装的virtualenv所生成的虚拟环境中并无该文件。

3. 激活 / 退出

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

4. 使用virtualenv 指定python解释器配合(pyenv)

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 # 在项目目录下,运行该命令后,以后进入该目录时,就会自动切换到这个虚拟环境。

提示

  • pyenv-virtualenv 是 pyenv(基于 Linux/macOS 的 shell 插件机制)的扩展。
  • Windows 上的 pyenv-win 并没有插件系统(只能单纯管理多版本 Python)。
  • 所以 pyenv-virtualenv 在 Windows 上完全没法用。

4. 使用虚拟环境(以requirements.txt文件举例进行依赖管理)

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

3. Pipenv --- 虚拟环境(py3.6+)的创建(Pipenv最强大的功能是依赖管理,这部分后续讲解)

1. 创建虚拟环境命令

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 许可协议。转载请注明出处!