📕 第2章 Python 的准备与基本语法
📄 一句话概括

Windows 上装 Python 只有一件事容易错:安装第一屏那个「Add python.exe to PATH」的勾。不勾, 命令行里敲 python 就没反应,后面所有步骤都会卡住。 装完要确认四样:版本号、实现、位数、PATH 里找不找得到。 再建一个虚拟环境,让每个项目有自己的一套包。 这一节把检查做成一张表,实跑结果是: 3.13.14/CPython/64 位/python 找到/py 启动器没找到/已装 90 个包。

📝 本节和前面几节的关系

第 1 章讲完了原理,从这一节开始动手。第 2 章五节全是环境,跟算法没关系。 装不好环境是初学者最常卡的一关,所以这五节写得比算法章节细。 本节只讲 Windows;Mac 在下一节。两台机器都用的写法放在 2.3、2.4 的末尾。

一、装哪个

三条路:python.org 官方安装包、Microsoft Store、Anaconda。 官方安装包最干净,装出来就是一个解释器加 pip;Store 版省事但路径埋在系统深处,出问题不好查; Anaconda 一次给你几百个科学计算包,代价是体积几个 G、 而且它自己的包管理器和 pip 会打架(2.3 节细说)。 本书的路子:先装官方包,缺什么再 pip 装什么。等你确实需要一个开箱即用的数据环境, 再考虑 Anaconda。

二、安装时那三个勾

从 python.org 下 Windows installer(64-bit),双击,第一屏底下有两个勾: 「Add python.exe to PATH」必须勾上,「Install launcher for all users」建议勾。 第二个装了才有 py 这个启动器,多版本共存时用得上。 第二屏选 Customize 的话,会多出 pip、tcl/tk、测试套件这些选项,默认全勾就行。 pip 一定不能取消,否则连装包的工具都没有。 为什么不勾 PATH 就出事?因为「敲 python 就能跑」靠的是系统在 PATH 列的那串目录里找 python.exe。 安装包没把这目录加进去,命令行自然找不到。

三、装完确认四件事

开一个新的命令提示符(必须新开,旧窗口的 PATH 还是旧的),依次敲:

python --version
pip --version
where python
python -c "import sys; print(sys.executable)"

四个都答得出来才算装成。 第三条 where python 尤其重要: 如果它列出两个以上路径,说明机器上有多份 Python,你后面 pip 装的包可能进了另一份。 第四条打出来的路径,应该和第三条的第一个一致。不一致就是 PATH 顺序有问题。

四、虚拟环境:一个项目一套包

不建虚拟环境的后果:A 项目要 numpy 1.x,B 项目要 numpy 2.x,两个项目共用一个 site-packages, 只能留一个版本。 做法很简单:在项目目录里 python -m venv v,就会多出一个 v 目录。 激活它(v\Scripts\activate.bat),之后 pip 装的东西全进这个目录。 venv 里的目录结构值得记住:Scripts 放可执行文件(python.exe、pip.exe、activate.bat), Lib\site-packages 放包,pyvenv.cfg 记着它指向哪个基础解释器。 它不是复制一份 Python,只是造了个壳。 所以建一个 venv 只要一两秒,删掉也只是删个目录,系统和别的环境一点不受影响。

五、装坏了怎么退

三条退路,按轻重排:停用当前环境(敲 deactivate)、删掉 venv 目录(整个目录删,包全没)、 卸载 Python 重装。 卸载前先看 py -0 或 where python,确认机器上到底有几份。 有多份时,控制面板里卸载的可能不是你在用的那份。 还有一个常见故障:装完 python 命令能跑,但 pip 不行。 先用 python -m pip --version 试——能跑就说明只是 pip.exe 没进 PATH, 以后统一写 python -m pip install xxx 就绕过去了。

六、动手 Demo:把环境查一遍

这一段不装任何东西,只做检查:解释器是哪一份、PATH 里找不找得到、py 启动器有没有、已经装了多少包, 最后建一个 venv 看它里面的结构。

import os, sys, platform, shutil, subprocess, tempfile

print(sys.version.split()[0])            # 3.13.14
print(platform.python_implementation())  # CPython
print(os.path.basename(sys.executable))  # python.exe
print(shutil.which("python"))           # PATH 里第一个 python
print(shutil.which("py"))               # Windows 启动器在不在

# 建一个虚拟环境,装完看一眼里面的结构,用完就删
tmp = tempfile.mkdtemp(prefix="venv43_")
subprocess.run([sys.executable, "-m", "venv", os.path.join(tmp, "v")],
               check=True)
print(os.listdir(os.path.join(tmp, "v")))          # Include Lib Scripts
print(os.listdir(os.path.join(tmp, "v", "Scripts")))

实跑输出:

--------------------------------------------------------------------
Python 的安装~Windows 篇~:把环境查一遍
--------------------------------------------------------------------

  检查项                结果
  --------------------------------------------------------------
  解释器版本            3.13.14
  实现                  CPython
  可执行文件            python.exe
  所在目录              Scripts
  操作系统              Windows-10-10.0.19045-SP0
  位数                  64 位
  PATH 里的 python      找到
  PATH 里的 python3     找到
  py 启动器             没找到
  已装包数              90
  venv 里 python        3.13.14
  venv\Scripts 文件数   10

  这张表就是一个装完 Python 的人该确认的全部东西。
  **版本对、实现对、位数对,这三项过了,语言本身就没问题;**
  **PATH 里找得到,才说明你在任意目录敲 python 都能跑起来。**

  py 启动器那一行是 Windows 独有的:装了它才能用 py -3.13 这种写法挑版本,
  不装也不影响 python 命令,只是多版本共存时没这么方便。

  venv 那两行是本节的重点:**虚拟环境不是复制一份 Python,是造一个指向它的壳。**
  壳里只有 pip 和几个启动脚本,包是空的;装什么都进这个壳,
  壳一删,系统那边一点痕迹不留。

版本 3.13.14、实现 CPython、64 位、PATH 里 python 找到、py 启动器没找到。前四项都对, 说明语言本身没问题;py 启动器缺了,只影响多版本切换,不影响使用。 注意「所在目录 Scripts」这一行:解释器住在 ...\envs\default\Scripts\ 下面。 看到路径里带 envs 或 venv,就说明你正在一个虚拟环境里,这时候 pip 装的包都进这里, 不会污染系统。 venv 那两行是把「壳」拆开看:顶层只有 Include、Lib、Scripts 和 pyvenv.cfg 四样, Scripts 里 10 个文件全是启动脚本和 pip——一个计算包都没有。 这解释了一个常见困惑:新建的 venv 里 import numpy 会失败。 因为它本来就是空的,你要在里面重新 pip install numpy。 「环境建好了但跑不了代码」不是坏,是还没装包。

30 秒实验

  1. 在命令提示符里敲 where python,看它列出几个路径; 再敲 python -c "import sys; print(sys.path)",数数有几条。
  2. 不激活 venv,直接敲 v\Scripts\python.exe -c "import sys; print(sys.prefix)", 看它报的是哪个目录。
  3. 把 PATH 里 Python 那一条临时删掉,再敲 python,看报什么错——这就是没勾 PATH 的样子。

常见误区

  1. 装完不新开窗口就去敲 python。 旧窗口的 PATH 是启动时读的, 不改环境变量它永远看不见新装的路径。
  2. 以为装了 Anaconda 就等于装了 Python,可以随便 pip。 用 Anaconda 就用 conda 装, 混着来容易把 conda 的环境弄坏,而且 pip 装的包 conda 看不见。
  3. 把包装在系统 Python 里。 装一次爽,出问题要卸载整个 Python。 每个项目一个 venv,删掉就是干净重来。
自测三问(点开对答案) 1. 「Add python.exe to PATH」不勾,会出什么问题? —— 命令行找不到 python.exe,敲 python 会提示「不是内部或外部命令」。 程序其实装了,但系统不知道该去哪儿找它。 2. venv 目录里 Scripts、Lib、pyvenv.cfg 各是干什么的? —— Scripts 放可执行文件和激活脚本,Lib\site-packages 放这个环境装的包, pyvenv.cfg 记着它基于哪个基础解释器。 3. 为什么新建的 venv 里 import numpy 会失败? —— 因为 venv 是空壳,只有 pip,没有从系统环境继承任何第三方包。要用就得在这个环境里再装一遍。

Windows 这套走完了,下一节是 Mac。 Mac 上最大的坑不一样——系统自带的那份 Python 可能是个很旧的版本,直接敲 python 会踩到它。

相关笔记