01- 环境、解释器与开发工具
本节目标:搞清楚”一个 Python”到底是什么、多个 Python 怎么共存、虚拟环境解决什么问题、venv 与 conda 的区别、PyCharm Interpreter 的本质。
一、一个 “Python” 是什么
装一个 Python,本质上就是把三样东西放到硬盘的某个文件夹:
- 一个可执行文件(
python.exe)——真正能跑.py文件的程序 - 一堆标准库——Python 自带的
os、json、math等,存在安装目录的Lib/下 - 一个 site-packages 目录——
pip install装的第三方包堆在这里
典型布局:
C:\Python310\
python.exe
Lib\
Lib\site-packages\ ← 第三方包目录
二、多个 Python 共存的真相
电脑上可以同时装多个 Python(不同版本、不同来源),它们完全独立、互不干扰:
- 各有各的
python.exe - 各有各的
site-packages——给 Python 3.10 装的 numpy,Python 3.12 看不到 - 不会冲突,也不会”打架”
跑代码用的是哪一个?
取决于敲 python 时,系统找到的是哪一个 python.exe。
Windows 通过环境变量 PATH 决定:从前往后扫 PATH 列表里的目录,找到第一个包含 python.exe 的就用它。
排查命令
python --version # 看版本
where python # Windows:列出 PATH 里所有 python.exe,第一个就是当前用的三、为什么需要虚拟环境
厨房比喻
- 餐厅 A 要 酱油 1.0,餐厅 B 要 酱油 2.0,餐厅 C 要 酱油 3.0 测试版
- 如果共用一个厨房一瓶酱油,装哪一瓶都会得罪另外两家
- 解决方法:每个餐厅一个独立厨房,各摆各的酱油
对应到 Python
| 比喻 | Python 现实 |
|---|---|
| 餐厅 / 项目 | 一个 Python 项目 |
| 酱油牌子 | 第三方包(numpy、pandas 等) |
| 酱油版本 | 包的版本(numpy 1.20 vs 1.26) |
| 公共厨房 | 全局 Python |
| 独立厨房 | 虚拟环境 |
核心冲突:项目 A 要 numpy==1.20,项目 B 要 numpy==1.26,同一个全局 Python 里同一个包只能装一个版本——必须隔离。
虚拟环境的本质:给每个项目”切”一个独立的 site-packages,装包只装到这个盒子里,不污染全局,盒子之间互不干扰。
四、venv:Python 自带的虚拟环境工具
创建与结构
cd D:\projects\myproject
python -m venv .venv # 在当前目录建一个名叫 .venv 的虚拟环境执行后多出一个 .venv\ 目录:
myproject\
.venv\
Scripts\
python.exe ← 链接到全局 Python(不是复制)
pip.exe
activate.bat ← 激活脚本
Lib\
site-packages\ ← ⭐ 这个项目专用的包目录,初始为空
关键特点
- 不复制 Python 本身——
.venv\Scripts\python.exe实际链接到全局 Python 的解释器,所以 venv 很轻量 - 独立的
site-packages——pip install只装到这里,不污染全局 - 激活 = 把
.venv\Scripts\临时塞到PATH最前面——激活后敲python跑的就是虚拟环境里那个
激活与退出
.venv\Scripts\activate # 激活(命令行前面会显示 (.venv) 标识)
deactivate # 退出venv 的局限
venv 只能基于”已经装好的 Python”建环境。想要 Python 3.11,得自己先去 python.org 装一个 3.11,venv 不会帮你下载 Python。
五、conda:发行版 + 包管理 + 环境管理 三合一
装 Anaconda / Miniconda 时,实际上得到了:
- 一个 Python(conda 自带的基底)
- conda 命令行工具
- base 环境(默认环境)
conda 比 venv 强在两点
① 能直接下载并安装不同版本的 Python
conda create -n myenv python=3.11 # 即使电脑上没装 3.11,conda 会自己下载② 能管理”非 Python 的二进制依赖”
很多包(numpy、scipy、PyTorch、GDAL、PostGIS 客户端等)依赖 C 库、Fortran 库、CUDA 等。pip 装容易出错;conda 通过自己的二进制仓库(conda-forge)通常一条命令搞定。
→ 这就是科学计算、机器学习、GIS、地质建模偏爱 conda 的原因。
六、venv vs conda:对照表
| 场景 | 推荐 |
|---|---|
| 纯 Python 项目(Web、脚本、爬虫、自动化) | venv |
| 科学计算 / 机器学习 / GIS / 地质建模 | conda |
| 不想折腾、只想跑起来 | conda |
| 想精简、对系统有洁癖 | venv |
重要提醒:不要 conda 嵌套 venv,也不要 venv 嵌套 conda,一个项目选一种就行。
七、PyCharm 的 Interpreter 是什么
PyCharm 的 Python Interpreter 设置 = 在选这个项目用哪个
python.exe,仅此而已。
它就是一个指针,指向硬盘上某个具体的 python.exe 文件。
三种常见 Interpreter
| 选项 | 实际选的是 | 场景 |
|---|---|---|
| 系统某个全局 Python | C:\Python310\python.exe | 一次性小脚本 |
| 某个 venv 虚拟环境 | 项目\.venv\Scripts\python.exe | 标准做法 |
| 某个 conda 环境 | Anaconda3\envs\myenv\python.exe | 科学计算 / 复杂依赖 |
标准开局流程
用 venv
File → New Project- Python Interpreter 选 “New environment using Virtualenv”
- Base interpreter 下拉框选一个已装的 Python(如
C:\Python310\python.exe) - Location 默认
项目\venv\,可保留 - Create
用 conda
File → New Project- Python Interpreter 选 “New environment using Conda”
- Conda executable 让 PyCharm 找到
conda.exe - Python version 选要的版本(如 3.11)
- Create
八、环境问题排查清单
报错”找不到 xxx 包”时,先确认环境,再看包:
# 第 1 步:看现在用的是哪个 python.exe
where python
# 第 2 步:看这个环境里有没有目标包
pip show pandas
# 或
pip list | findstr pandas # Windows
# 第 3 步:用这个 python 试着 import
python -c "import pandas; print(pandas.__version__)"一个常见坑
- PyCharm 项目 Interpreter 是
项目\.venv\python.exe - 但在外面的 cmd 里
pip install pandas——装到了全局,不是这个项目 - 回 PyCharm 跑代码报错,外面 cmd
pip list显示 pandas 在 - 原因:外面 cmd 和 PyCharm 用的根本不是同一个 Python
口诀:报错的那个 Python,就用那个 Python 的 pip 去查、去装。最稳的做法是直接在 PyCharm 内置 Terminal 里操作——它自动激活了项目环境。
九、本节核心打包(5 句话回顾)
- 一个 Python = 一个
python.exe+ 自己的 Lib + 自己的 site-packages - 多个 Python 互不打架,关键看哪一个被用来跑代码
- 虚拟环境 = 给项目切一个独立的 site-packages,装包不污染全局
- venv 不带 Python(必须基于已装的);conda 自带 Python,还能下载新版本+管二进制依赖
- PyCharm 的 Interpreter 设置 = 在选项目用哪个
python.exe
十、本节关键术语
| 术语 | 一句话定义 |
|---|---|
| 解释器(Interpreter) | 真正读你的 .py 文件并执行的程序,即 python.exe |
| site-packages | 第三方包安装目录 |
| PATH | 系统环境变量,决定命令行找可执行文件的搜索顺序 |
| 虚拟环境 | 给项目切的独立包目录,实现项目间隔离 |
| venv | Python 3 自带的虚拟环境工具,轻量 |
| conda | 发行版 + 包管理器 + 环境管理器三合一,能下不同版本 Python |
| 激活 | 把虚拟环境的 Scripts 路径塞到 PATH 最前面 |