本文目录
你刚拿到一台新机器,想跑一段 Python 脚本。终端里敲 python,可能弹出的是系统自带的旧版本,也可能根本没有这个命令。环境没搭好之前,任何语法讨论都落不到可执行的代码上。这篇按清单走一遍:先分清几个容易混的概念,再装解释器、建隔离环境,最后用一个小脚本验证整条链路。
四个名字先对齐
解释器(interpreter)是读 .py 文件并执行字节码的程序,也就是你终端里调用的 python 或 python3。它负责「跑代码」,不负责帮你装第三方库。没有解释器,.py 只是文本;有了它,文本才变成可执行的程序。
REPL(Read-Eval-Print Loop)是解释器提供的交互模式:敲一行、立刻看结果。终端输入 python3 进入,提示符变成 >>>。适合试语法、验表达式,不适合替代项目结构——脚本还是要写成 .py 文件再执行。REPL 里定义的变量,退出后就没了;持久逻辑应放在模块文件里。
标准库(stdlib)随解释器一起安装,比如 pathlib、json、datetime、urllib。import json 不需要额外下载,因为已经绑在解释器发行版里。标准库覆盖文件 I/O、网络基础、数据结构扩展等,但刻意不包含各家框架——Web 框架、测试增强、HTTP 客户端通常走第三方。
pip 是 Python 的包安装工具,从 PyPI 等索引拉取第三方包。标准库之外的依赖(如 httpx、pytest、django)靠 pip 装进当前环境。很多人把「装了 Python」和「能 import 任意库」混为一谈——后者还要 pip 和正确的环境上下文。pip list 看到的是当前激活环境里的包,不是全世界装过的包。
解释器、REPL、pip、stdlib 怎么配合
典型工作流:用解释器跑脚本或进 REPL;脚本里 import 标准库模块直接可用;缺第三方库时用 pip 安装到当前环境;安装后再 import,解释器从该环境的 site-packages 加载。
import json # 标准库,无需 pip
from pathlib import Path
data: dict[str, int] = {"a": 1}
Path("out.json").write_text(json.dumps(data), encoding="utf-8")若下一行要 import httpx,得先在这个环境里 pip install httpx。装错环境(比如系统 Python 而非项目 venv)是最常见的「我明明 pip install 了却 import 失败」原因。
为什么版本管理值得单独提
不同项目可能要求 Python 3.10 或 3.12。系统自带的 /usr/bin/python3 往往不能随意升级,升级还可能影响系统工具(如 Linux 发行版依赖特定 python3 跑包管理脚本)。pyenv 这类版本管理器让你在用户目录维护多个解释器版本,按目录或全局切换。概念上它解决的是「同一台机器上并存多个 Python 版本」——不必卸载旧版,也不必强行统一。
macOS 上也可以从 python.org 安装官方 pkg,或 Homebrew 装 python@3.12。选一种你能稳定复现的路径即可;关键是知道当前 shell 里 which python3 指向哪里。团队协作时,把期望版本写进 README 或 .python-version(pyenv 会读),比口头说「用新一点的 Python」可靠。
venv:把依赖关进各自的房间
全局 pip install 会把包装进「当前正在用的那个 Python」。项目 A 要 Django 4,项目 B 要 Django 5,混在一个环境里迟早冲突。venv 模块创建轻量虚拟环境:一套独立的 site-packages 和 python 可执行文件链接,互不干扰。
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
which python3 # 应指向 .venv 内
pip install httpx # 只装进这个 venv
deactivate # 退出虚拟环境激活后,终端提示符前通常出现 (.venv)。此后 python 和 pip 都指向隔离环境;退出后恢复系统默认。.venv 目录一般加入 .gitignore——它可从 requirements.txt 或锁文件重建,不必进版本库。
最小脚本:从文件到输出
REPL 验证了交互模式;项目里更常见的是脚本文件:
# hello.py
def greet(name: str) -> str:
return f"Hello, {name}"
if __name__ == "__main__":
print(greet("Python"))保存后,在项目目录执行:
python3 hello.py
# Hello, Pythonpython3 hello.py 启动解释器,读取文件、编译为字节码、执行。__name__ == "__main__" 表示「被直接运行」而非被 import——后面模块化会反复用到,这里先记住:直接跑脚本时这一分支会执行;别的文件 import hello 时不会自动打印。
IDE 不是必需品
VS Code、PyCharm、Cursor 等提供补全、调试、集成终端,但不是运行 Python 的前提。编辑器负责写文件;真正执行的是解释器。很多人第一次学 Python 时被 IDE 配置卡住——其实终端 + 任意文本编辑器就足够完成「写 .py → 跑起来 → 看输出」的闭环。IDE 是效率工具,可以等项目结构复杂了再加。调试器、测试运行器同样依附于已激活的 venv 和解释器路径。
验证清单
按顺序勾选,任何一步失败都先停在这一步排查:
| 步骤 | 命令 / 操作 | 期望结果 |
|---|---|---|
| 1 | python3 --version | 显示 3.x,且版本符合项目要求 |
| 2 | python3 -c "print('ok')" | 终端输出 ok |
| 3 | 进入项目目录,python3 -m venv .venv | 生成 .venv 目录 |
| 4 | source .venv/bin/activate 后 which pip | 路径在 .venv 内 |
| 5 | pip install --upgrade pip | 无报错 |
| 6 | 创建并运行 hello.py | 输出 Hello, Python |
| 7 | deactivate 后 which python3 | 不再指向 .venv |
第 4 步失败,多半是忘了 activate,或者 venv 建在了别的目录。第 6 步失败,检查文件名、当前工作目录,以及是否用了激活后的 python。若 pip 报权限错误,不要用 sudo pip 装项目依赖——回到第 3 步确认 venv。
常见误解
- 「装了 Anaconda 就不用 venv」:Conda 环境也是隔离,只是工具链不同。概念一样——别在 base 环境里堆所有项目的依赖。
- 「pip 和 apt/brew 装 Python 是一回事」:系统包管理器装的是发行版;
pip install装的是 Python 包索引里的 wheel。混用时要清楚谁在管哪个命名空间。 - 「3.12 能跑 2.7 的代码」:大版本之间语法不兼容。旧项目可能仍要旧解释器,这正是 pyenv 存在的理由之一。
- 「REPL 里能 import,脚本里就该能」:若 REPL 在 venv 里启动、脚本用系统 python3 跑,两边看到的包集合不同。统一用同一解释器路径。
把依赖写进文件
小项目可以口头记住装了什么;稍大一点就该有 requirements.txt 或 pyproject.toml,方便同事和 CI 复现:
pip freeze > requirements.txt
pip install -r requirements.txtfreeze 列出当前环境全部包及精确版本;install -r 按清单批量安装。venv 激活状态下执行,装进去的仍是隔离环境里的包,不会污染系统解释器。换机器时「建 venv → install -r」是标准起手式。
环境搭稳之后,下一篇可以直接进入语法:缩进、名字、基本类型,不再被「命令找不到」打断。