装 Python 只有一件事要搞清楚:
你敲 python 敲到的到底是哪一个。 Demo 打出当前环境的信息——版本 3.13.14、64 位、
可执行文件在哪个目录、是不是虚拟环境;再扫一遍 PATH,看上面有几份 python。
这台机器上只找到 1 份,但装过 Anaconda 之后就会变成两三行。
第 5 章是全书最后一章,也是最短的一章:装 Python、建虚拟环境、装第三方包。 三件事都很基础,但新手卡住的地方八成在这里,而不是在算法上。 前面四章的 Demo 全是在一个已经配好的环境里跑的;这一章讲那个环境是怎么来的。 如果你已经能跑通前面的代码,这一章可以快速过一遍,但第二节的虚拟环境别跳。
一、装哪一个:版本、位数、来源
版本:这本书的示例代码是 Python 3.7 加 scikit-learn 0.20.3 写的。
现在装当然用新版本(3.10 以上),但要知道一件事:库的版本和 Python 的版本是绑在一起的,
太新的 Python 可能还没有某些库的轮子。稳妥的选择是「比最新版落后一两个小版本」。
位数:一定装 64 位。
32 位 Python 单个进程最多用 2 GB 内存,跑稍微大一点的数据就 MemoryError,
而且报错信息不会告诉你「是因为你装了 32 位」。
来源:官网 python.org 或者微软商店都行,别从来路不明的「绿色版」装。
Windows 上装的时候有个选项叫「Add Python to PATH」,
建议勾上——勾了才能在命令行里直接敲 python。没勾也能补救,但要手动改环境变量。
二、装完先做三件事
第一,敲 python --version 看版本。 如果提示「不是内部或外部命令」,说明 PATH 没配好,
或者装的时候没勾那个选项。
第二,敲 where python(Windows)或 which -a python(macOS/Linux)。
这条会按 PATH 顺序列出所有能找到的 python。
只有一行最好,多行就要小心了——敲 python 用的是第一行那个。
第三,跑一句 python -c "import sys; print(sys.executable)"。
这行打出的是「这个 python 的可执行文件在哪」,是排查环境问题的第一把钥匙。
Demo 里第一张表的第二行就是这个。
还有个小坑:Windows 上有个 py 启动器,
敲 py --version 和 python --version 可能给出不同答案——
py 按自己的规则挑版本,和 PATH 不是一条路。 查哪个就用哪个命令,别混着用。
三、为什么推荐用虚拟环境而不是直接装在系统里
直接 pip install 到系统 Python 里当然能用,直到你同时做两个项目。
A 项目要 numpy 1.x,B 项目要 numpy 2.x,系统里只能留一个。
更糟的是改系统 Python 可能弄坏操作系统自己依赖的组件(Linux 上尤其危险)。
虚拟环境解决的就是这件事:每个项目一个独立目录,里面有自己的 Python 副本和自己的包仓库。
装坏了删掉重建,五分钟的事。
代价是每个环境都要重新装一遍依赖。这个代价用 requirements.txt 就能抹平——下一节会讲。
四、动手 Demo:先确认「我用的到底是哪个 Python」
这一段不装任何东西,只是把当前环境的信息打出来。 换一台机器、换一个环境,这些数都会变——所以要自己跑一遍,而不是照抄这里的输出。 四行代码:版本号、可执行文件路径、是不是 64 位、在不在虚拟环境里。 后面还会扫一遍 PATH,看上面到底有几份 python。
import os
import sys
print(sys.version_info[:3]) # 版本号,比如 (3, 13, 14)
print(sys.executable) # 这个 Python 到底在哪个目录
print(sys.maxsize > 2 ** 32) # True 就是 64 位
print(sys.prefix != sys.base_prefix) # True 就是在虚拟环境里
# 这条命令能列出 PATH 上所有的 python,按找到的顺序
# where python (Windows)
# which -a python (macOS / Linux)
实跑输出:
--------------------------------------------------------------------
先把「我用的是哪个 Python」搞清楚
--------------------------------------------------------------------
环境搭建这一章不讲算法,讲的是**把工具装对**。
先说一个很多人栽过的坑:电脑上可能同时装着三四个 Python,
**你敲 `python` 敲到的是哪一个,取决于 PATH 的顺序,不取决于你想用哪个。**
【一】当前这个 Python 到底是谁
项目 值
------------------------------------------------------------------------
版本 3.13.14
可执行文件 C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\python.exe
位数 64 位
是虚拟环境吗 是(sys.prefix 和 base 不一样)
site-packages C:\Users\admin\.workbuddy\binaries\python\envs\default\Lib\site-packages
**`sys.executable` 是最有用的一行。**
当你怀疑「装了包却 import 不到」时,把它打出来,就能确认「我到底在给哪个 Python 装包」。
位数那一行用 `sys.maxsize` 判断,这是老办法里最可靠的一个。
32 位 Python 单个进程最多用 2 GB 内存,跑深度学习直接爆——
**装之前先确认位数,能省掉后面一整天的排查。**
【二】PATH 上的 Python 有几份
序号 PATH 里的位置
------------------------------------------------------------------------
1 C:\Users\admin\.workbuddy\binaries\python\versions\3.13.12\python.exe
这台机器上只找到 **1** 份,所以没什么歧义。
**但只要装过第二个 Python(比如后来又装了 Anaconda),这里就会变成两三行,那时就麻烦了。**
**敲 `python` 永远用第 1 份**
——哪怕它不是你想用的那个。这就是「明明装了 pandas 却 import 不到」的经典原因。
【三】三条命令,装完之后各查一次
命令 它回答什么
----------------------------------------------------------------------------------------
python --version 这个 python 是几点几版本
where python(Windows) PATH 上有哪几份 python,按顺序列出来
python -c "import sys; print(sys.executable)" 这一份 python 的可执行文件在哪
**别用 `py --version` 代替 `python --version`。**
Windows 上 `py` 是一个启动器,它按自己的规则挑版本,和 `python` 走的不是一条路。
**查哪个就用哪个命令。**
第一张表里最有用的两行是「可执行文件」和「是虚拟环境吗」。 前者告诉你「东西装在哪儿」,
后者告诉你「会不会影响系统」。
Demo 这台机器上是在虚拟环境里的,sys.prefix 和 sys.base_prefix 不一样。
PATH 那一栏只找到 1 份 python。 这是好事——没什么歧义。
但只要你后来又装了 Anaconda,这里就会变成两三行,而且 Anaconda 常常把自己插到最前面,
于是 python 悄悄换了人。
位数是用 sys.maxsize 的数值大小判断的。 这个写法看着怪,但它比查注册表、比读环境变量都可靠,
而且跨平台。64 位机器上这个数是 9223372036854775807,32 位只有 2147483647,差着 43 亿倍。
最后那张三行表建议抄下来。 装完之后查一次、装包报错时查一次、
「明明装了却 import 不到」时再查一次。这三个命令能解决八成的环境问题。
30 秒实验
- 在你的机器上跑
where python,列出几行?第一行和sys.executable一致吗? - 如果装了两个 Python,怎么让命令行默认用第二个?(提示:改 PATH 的顺序)
- 把
sys.maxsize直接打印出来,这个数是多少?它和位数什么关系?
常见误区
- 装 32 位 Python。能装能用,直到数据大一点就 MemoryError,而且报错完全看不出是位数问题。 装之前确认 64 位。
- 把
py和python当同一个命令。Windows 的py启动器按自己的规则挑版本, 和 PATH 上的python可能不是同一个。查哪个用哪个。 - 把所有包都装进系统 Python。短期省事,长期是灾难——版本冲突无解,还可能弄坏系统组件。 每个项目一个虚拟环境。
自测三问(点开对答案)
1. `python --version` 报「不是内部或外部命令」,最可能是什么原因? —— PATH 里没有 Python 的目录。 可能是安装时没勾「Add Python to PATH」,或者装了但没重启命令行(环境变量要新开窗口才生效)。 2. 为什么一定要装 64 位? —— 32 位进程的地址空间上限约 2 GB,数据一大就 MemoryError。 而且这个限制不会在报错里明说,很难排查。 3. `sys.executable` 有什么用? —— 它打出当前 Python 解释器的完整路径。 排查「装了包却 import 不到」时,先看它,就能确认「我到底在给哪个 Python 装包」。Python 装好了,下一步是别把它装脏——5.2 节讲虚拟环境。
- ☐ (本节完,下一节 5.2 虚拟环境)