📊 第2章 搭建 Python 数据分析环境
📄 一句话概括

装 Python 只有一步要留神:勾上 Add Python to PATH。不勾后面要手动补。 装完有三个路径要认清:解释器本身、它的根目录、它的模块搜索路径。 sys.path 一共 11 条,顺序有意义——靠前的先被找到,同名模块先到先得。

📝 本章和前面几章的关系

上一篇定了版本,这一篇动手装。教材用 Windows 举例,步骤照写。 安装界面本沙箱不执行,但装完之后「系统怎么找到解释器」这件事,可以现场打出来看。

一、下载与安装:两个页面要看清

从 python.org 下载 3.x 的 Windows 安装包。两个选择:64 位安装包,和 64 位可执行安装包。 前者是给全体用户装的(要管理员权限),后者只给当前用户装(不需要权限)。 安装界面的第一屏,最下面有一个勾选框:Add Python 3.x to PATH。这一勾是整篇文章的重点。

勾了,安装程序会往 PATH 里加两条:Python 目录本身,和它下面的 Scripts 目录。 不勾也能装成功,但命令行敲 python 会报「不是内部或外部命令」——下一篇专门讲这个。

二、IDLE 是什么

IDLE 是 Python 自带的编辑器,装完就有,不用另装。 它有两个窗口模式:一个是交互式(Shell),敲一行执行一行;一个是文件编辑,写完再整体跑。 交互式的用处是试:想确认 7 / 2 得几,敲进去立刻看到,不用建文件。

新手最该先用交互式:它把「写文件、保存、运行」这三步全省了,只剩「想—试」。 IDLE 的缺点也明显:没有自动补全、没有调试器、字体难看。所以第 2.4 篇换 PyCharm。

三、装完先认三个路径

装完之后有三样东西要分清,混了就会出各种怪问题。

名字 是什么 本机的实际值
sys.executable 解释器程序本身 …\envs\default\Scripts\python.exe
sys.prefix 这套 Python 的根目录 …\envs\default
sys.path import 时的搜索目录 11 条,见下方

sys.path 一共 11 条,其中目录真实存在的是 10 条——有一条是 .zip 包, Python 能直接从压缩包里导入模块。 第一条通常是脚本所在目录,所以你在项目里放一个 utils.py,同目录的脚本能直接 import。

四、顺序为什么重要

import 的时候,Python 按 sys.path 的顺序一条条找,找到第一个就停下。 所以「先到先得」不是比喻:靠前目录里的同名文件,会盖住靠后目录里的。 经典事故:自己在项目里建了一个 random.py,结果 import random 拿到的是自己的文件, 标准库的 random 反而找不到了。

这类报错看着莫名其妙,原因就在排序上。 报错原文是 AttributeError: module 'random' has no attribute 'randint'—— 它找到的 random 里根本没有这个函数。 排错办法:import 之后打一下 random.file,看它到底从哪儿来的。

五、装完该做的三件事

第一,重开一个命令行窗口,敲 python -V,看到 3.x 就成。 第二,敲 python -m pip -V,确认 pip 和 python 是同一套。两个版本不一致是下一个坑。 第三,敲 python -c "import sys; print(sys.executable)",把路径记下来。

这三件事花两分钟,能省掉后面几小时的困惑。

六、动手 Demo:装在哪:解释器是怎么被找到的

打出解释器路径、根目录、模块搜索路径的前几条,再数一下 path 有几条。 换一台机器跑,这些都会变——所以不要把路径写死在代码里。

import os
import sys

print("解释器  %s" % sys.executable)
print("根目录  %s" % sys.prefix)
print("path 共 %d 条,存在的 %d 条"
      % (len(sys.path), len([p for p in sys.path if p and os.path.isdir(p)])))

for i, p in enumerate(sys.path[:4]):
    print("  [%d] %s" % (i, p))

实跑输出:

--------------------------------------------------------------------
装在哪:解释器是怎么被找到的
--------------------------------------------------------------------

  ① 三个路径,三种含义
  --------------------------------------------------------------------
  sys.executable:当前这个解释器程序本身的路径。
    C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\python.exe
  sys.prefix:这套 Python 的根目录,标准库和 site-packages 都在它下面。
    C:\Users\admin\.workbuddy\binaries\python\envs\default
  sys.path:import 时按顺序找模块的目录列表,第一条通常是脚本所在目录。
    [0] I:\Desktop\自我教学\.workbuddy\scripts\ch61_dev
    [1] D:\WorkBuddy\resources\app.asar.unpacked\cli\vendor\shim
    [2] C:\Users\admin\.workbuddy\binaries\python\versions\3.13.12\python313.zip
    [3] C:\Users\admin\.workbuddy\binaries\python\versions\3.13.12\DLLs
  ! import 找不到模块,八成是 sys.path 里没有那个目录,而不是文件不存在。

  ② 同一个包,两套环境就有两个副本
  --------------------------------------------------------------------
  本机有两套解释器:一套是系统级的 3.13.12,一套是当前这个环境的 3.13.14。
  它们各有各的 site-packages。在 A 里 pip install 的包,B 里看不见。
  这就是「虚拟环境」要解决的问题:一个项目一套依赖,互不污染。
  ! 装完包提示成功、代码里却 import 失败,第一件事就是打 sys.executable 看是不是同一个。

  ③ 路径里有几条,直接数出来
  --------------------------------------------------------------------
  sys.path 一共 11 条,其中目录存在的是 10 条。
  顺序有意义:靠前的先被找到,同名模块会「先到先得」。
  ! 自己写的文件叫 random.py 会把自己的文件当成标准库的 random——这是排序导致的经典事故。

  ④ 现场验证
  --------------------------------------------------------------------
  下面这段代码打出解释器路径、根目录、以及 path 的前几条。
  换一台机器跑,这三样都会变,所以不要把这些路径写死在代码里。
  ! 要拼路径用 os.path.join 或 pathlib,不要手写反斜杠。

sys.executable 是排查环境问题的第一把钥匙:包装不上、import 失败,先看它指哪儿。 那个 os.path.isdir 过滤掉的是 .zip 路径。 sys.path 里可以有压缩包,它不是目录,但 Python 照样能从中导入模块。

30 秒实验

  1. 把 sys.path 全部打出来,看看哪一条是你当前脚本所在的目录。
  2. 在脚本目录里新建一个 random.py(内容随便),再 import random 看看会发生什么。
  3. 想一想:为什么 pip 装完的包在另一个 Python 里 import 不到?

常见误区

  1. 装 Python 不勾 Add to PATH:装完命令行找不到 python,还得手动改环境变量。
  2. 把路径写死在代码里:换机器就废,应该用 os.path 或 pathlib 现算。
  3. 文件名和标准库重名:random.py、json.py、types.py 都是经典事故。
  4. 不确认 pip 和 python 配不配对:装到 A 用 B,是最费时间的故障之一。
自测三问(点开对答案) 1. sys.executable 和 sys.prefix 有什么区别? —— 前者是解释器程序文件的路径,后者是这套 Python 的根目录,标准库和第三方包都在根目录下面。 2. 为什么自己建一个 random.py 会让 import random 出错? —— 因为脚本所在目录排在 sys.path 第一位,自己的文件先被找到,盖住了标准库的同名模块。 3. 装完 Python 立刻该验证哪三件事? —— python -V 看版本、python -m pip -V 看配对、打 sys.executable 看路径。

装完了,但很多人卡在下一步:命令行敲 python,报「不是内部或外部命令」。 下一篇专门讲这个报错怎么读、怎么修。

相关笔记