01- 环境、解释器与开发工具

本节目标:搞清楚”一个 Python”到底是什么、多个 Python 怎么共存、虚拟环境解决什么问题、venv 与 conda 的区别、PyCharm Interpreter 的本质。

一、一个 “Python” 是什么

装一个 Python,本质上就是把三样东西放到硬盘的某个文件夹:

  1. 一个可执行文件(python.exe)——真正能跑 .py 文件的程序
  2. 一堆标准库——Python 自带的 osjsonmath 等,存在安装目录的 Lib/
  3. 一个 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\   ← ⭐ 这个项目专用的包目录,初始为空

关键特点

  1. 不复制 Python 本身——.venv\Scripts\python.exe 实际链接到全局 Python 的解释器,所以 venv 很轻量
  2. 独立的 site-packages——pip install 只装到这里,不污染全局
  3. 激活 = 把 .venv\Scripts\ 临时塞到 PATH 最前面——激活后敲 python 跑的就是虚拟环境里那个

激活与退出

.venv\Scripts\activate       # 激活(命令行前面会显示 (.venv) 标识)
deactivate                   # 退出

venv 的局限

venv 只能基于”已经装好的 Python”建环境。想要 Python 3.11,得自己先去 python.org 装一个 3.11,venv 不会帮你下载 Python。

五、conda:发行版 + 包管理 + 环境管理 三合一

装 Anaconda / Miniconda 时,实际上得到了:

  1. 一个 Python(conda 自带的基底)
  2. conda 命令行工具
  3. 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

选项实际选的是场景
系统某个全局 PythonC:\Python310\python.exe一次性小脚本
某个 venv 虚拟环境项目\.venv\Scripts\python.exe标准做法
某个 conda 环境Anaconda3\envs\myenv\python.exe科学计算 / 复杂依赖

标准开局流程

用 venv

  1. File → New Project
  2. Python Interpreter“New environment using Virtualenv”
  3. Base interpreter 下拉框选一个已装的 Python(如 C:\Python310\python.exe)
  4. Location 默认 项目\venv\,可保留
  5. Create

用 conda

  1. File → New Project
  2. Python Interpreter“New environment using Conda”
  3. Conda executable 让 PyCharm 找到 conda.exe
  4. Python version 选要的版本(如 3.11)
  5. 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
  • 但在外面的 cmdpip install pandas——装到了全局,不是这个项目
  • 回 PyCharm 跑代码报错,外面 cmd pip list 显示 pandas 在
  • 原因:外面 cmd 和 PyCharm 用的根本不是同一个 Python

口诀:报错的那个 Python,就用那个 Python 的 pip 去查、去装。最稳的做法是直接在 PyCharm 内置 Terminal 里操作——它自动激活了项目环境。

九、本节核心打包(5 句话回顾)

  1. 一个 Python = 一个 python.exe + 自己的 Lib + 自己的 site-packages
  2. 多个 Python 互不打架,关键看哪一个被用来跑代码
  3. 虚拟环境 = 给项目切一个独立的 site-packages,装包不污染全局
  4. venv 不带 Python(必须基于已装的);conda 自带 Python,还能下载新版本+管二进制依赖
  5. PyCharm 的 Interpreter 设置 = 在选项目用哪个 python.exe

十、本节关键术语

术语一句话定义
解释器(Interpreter)真正读你的 .py 文件并执行的程序,即 python.exe
site-packages第三方包安装目录
PATH系统环境变量,决定命令行找可执行文件的搜索顺序
虚拟环境给项目切的独立包目录,实现项目间隔离
venvPython 3 自带的虚拟环境工具,轻量
conda发行版 + 包管理器 + 环境管理器三合一,能下不同版本 Python
激活把虚拟环境的 Scripts 路径塞到 PATH 最前面