一、为什么先把"环境"这件事讲清楚
写代码之前不先管环境,迟早会踩进"依赖地狱":A 项目要 pandas==1.5,B 项目要 pandas==2.0,装到一起互相打架;系统 Python 被你塞满包,某天升级一个库,别的项目集体崩。
解决思路就一条:给每个项目一个独立、干净、可复制的运行环境 。这既是工程规范,也是协作基础------别人拿到你的 requirements.txt 或 environment.yml,一条命令就能重建出一模一样的环境。
下面先补一层认知,再上工具。
小结:环境隔离不是可选项,是 Python 工程化的第一步。
二、重新认识 Python:它到底是什么
1. 为什么选择 Python(WHY)
不急着背语法,先想清楚它为什么被大规模采用:
- 软件质量:设计之初就追求可读性与一致性,比传统脚本语言更易复用、好维护。
- 开发效率:代码量常为 C++/Java 的 1/5~1/3,写完直接运行,没有编译链接环节。
- 可移植性:绝大多数程序零修改即可跨平台运行。
- 标准库 + 第三方生态 :内置大量模块,外部还有网站、数值计算、游戏等支持(
NumPy可看作免费版 MATLAB)。 - 组件集成:能调 C/C++ 库、被 C/C++ 调用、与 Java/.NET 集成------它从不是孤立工具。
2. Python 是脚本语言吗
脚本语言的特征:解释执行、动态类型、自动内存管理、内置高级数据结构、胶水特性、快速原型、跨平台、可嵌入。
Python 常被贴三个标签,但都只是它的一部分:
- Shell 工具:命令行处理文本、拉起其它程序------仅占常规应用一小块。
- 控制语言:作为"胶水层"调度其它组件,例如测试硬件时调用底层访问组件。
- 便捷开发:相对 C++ 大幅提升速度,兼顾快速任务与长期战略开发。
结论:"脚本语言"更准确描述的是 Python 所支持的快速灵活开发模式,而非某个特定应用领域。
3. Python 的唯一硬伤:执行速度
在现有实现下,Python 比完全编译的 C/C++ 慢。根因是:源码先编译为字节码,再由虚拟机解释执行,不生成底层二进制指令。
但分场景看:
- 绝大多数应用速度足够,且文件读写、GUI 绘制这类"现实"操作实际调用的是解释器内部已编译的 C 代码,等效 C 速运行。
- 数值计算、动画渲染等热点,可抽离为编译好的扩展,再用 Python 串联。
- 开发效率收益通常大于执行速度损耗,现代 CPU 上尤为明显。
4. 技术上的优点
面向对象 + 函数式(多态、运算符重载、多重继承、生成器、推导、闭包、装饰器、lambda)、功能强大(动态类型、自动内存、大型程序支持、内置类型/工具/库)、可混合、可移植、免费、简单易学。
三、Python 程序是怎么跑起来的
1. 解释器是什么
Python 既是一门语言,也是一个叫解释器的软件包。解释器是"让别的程序跑起来的程序",位于代码与硬件之间的软件逻辑层。装完 Python 至少得到:一个解释器 + 一套支持库。
2. 执行流程:字节码编译 → PVM
# part1-base/part1-3-intro.md
python
print('hello world') # 在屏幕上打印 hello world 并换行
print(2**100) # 计算 2 的 100 次方并输出结果
运行脚本前内部走两步:
- 字节码编译 :源码先翻译为字节码(
.pyc),有写入权限时存入__pycache__/加速启动。触发重编译的两条件:源文件时间戳变更 、Python 版本变更(版本信息记在字节码文件名中)。无写入权限也不影响运行,字节码在内存生成,进程结束即丢弃。 - PVM(Python 虚拟机):字节码交 PVM 执行,它是真正的运行时引擎。
3. 实现变体:不止一个 Python
CPython:标准实现(C 语言编写)。PyPy:CPython 替代品,多数程序跑得更快。Jython/IronPython:分别为 Java、.NET 运行时编译,可直接调 Java/.NET 组件。
小结:
.pyc是启动加速手段,源文件或解释器版本一变就会自动重编译,无需手动清理。
四、虚拟环境:为每个项目建立隔离
1. 为什么用虚拟环境
- 隔离依赖:每个项目持有独立包版本,互不干扰。
- 不污染全局:包不写进系统 Python,系统环境保持干净。
- 便于部署 :导出
requirements.txt,其它机器一键重建。
2. venv 五步法
# part1-base/part1-1-virtual-env.md
bash
# 1. 创建(Python 3.3+ 内置 venv,无需额外安装)
python -m venv venv
# 2. 激活
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
# 3. 安装包(只在当前环境生效)
pip install requests django flask
# 4. 导出依赖清单
pip freeze > requirements.txt
# 5. 退出
deactivate
激活后命令行前缀变 (venv) $,此时 python / pip 均指向环境内版本。删除环境只需移除文件夹:rmdir /s venv(Win)/ rm -rf venv(Linux/Mac)。
3. 依赖管理:requirements.txt
# part1-base/part1-1-virtual-env.md
bash
pip freeze > requirements.txt # 导出依赖清单
pip install -r requirements.txt # 依据清单重建环境
4. 最佳实践与其他工具
- 项目根目录建环境,惯用名
venv。 - 把
venv/写进.gitignore,别提交进版本库。 - 开发完执行
pip freeze > requirements.txt便于协作。
其它可选工具:virtualenv(老牌兼容旧版)、pipenv(pip+virtualenv 合体)、poetry(现代一把梭)、conda(数据科学向,可管非 Python 依赖)。
5. 附录:用 uv 替代 pip(推荐)
# part1-base/part1-1-virtual-env.md
bash
pip install uv # 方式一
curl -LsSf https://astral.sh/uv/install.sh | sh # 官方脚本(推荐)
# uv 比 pip 快 10~100 倍,能处理更复杂依赖
uv pip install "llama-index-core>=0.14.0" llama-index-llms-openai llama-index-embeddings-openai
小结:venv 是工程化基本规范,流程五步------创建→激活→装包→导出→退出。条件允许优先用
uv替代pip。
五、Anaconda 与 Conda:数据科学的环境利器
1. 已装 Python 为什么还要 Anaconda
# part1-base/part1-2-conda.md
- 自带 150+ 数据科学包 + conda + Python,开箱即用。
- 包管理:conda 负责第三方包的安装、卸载与更新。
- 环境管理:不同项目要不同 Python 版本(2 与 3)、不同包版本(如不同 pandas),conda 为每个项目建独立环境,彼此隔离。
2. 国内镜像源加速(关键)
# part1-base/part1-2-conda.md
bash
# 添加清华镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --set show_channel_urls yes # 安装时显示来源 URL
conda config --show channels # 验证配置
也可直接编辑 ~/.condarc(Windows 位于 C:\Users\<用户名>\.condarc)。务必保留 - defaults ,国内源找不到包时回退官方源。还原默认源:conda config --remove-key channels。
注意:
channels列表从上到下 依次搜索,国内源应置于defaults之前才能优先命中。
3. conda 环境管理
# part1-base/part1-2-conda.md
bash
conda create --name ml-project python=3.10 # 创建(指定版本)
conda activate ml-project # 激活,前缀变 (ml-project)
conda install numpy pandas matplotlib # 优先用 conda 安装
pip install requests # conda 仓库缺失时再用 pip
conda deactivate # 退出
常用管理命令:
| 功能 | 命令 |
|---|---|
| 查看所有环境 | conda env list |
| 当前环境已装包 | conda list |
| 删除环境 | conda env remove --name myenv |
| 导出环境 | conda env export > environment.yml |
| 从文件建环境 | conda env create -f environment.yml |
原则:优先用 conda,conda 仓库缺失时再用 pip。
4. Jupyter 环境
# part1-base/part1-2-conda.md
Anaconda 装完,Jupyter 通常开箱即用。Notebook 像"网页版单本笔记",JupyterLab 是"浏览器中的 IDE"(升级版)。
bash
conda install -c conda-forge jupyterlab # 推荐(conda-forge 版本较新)
jupyter lab --version # 检查版本
jupyter lab # 启动,自动打开 http://localhost:8888
5. 搭建 AI 学习环境
# part1-base/part1-2-conda.md
bash
conda create --name ml-env python=3.10
conda activate ml-env
conda install numpy pandas pytorch torchvision torchaudio matplotlib matplotlib-inline ipython
在 PyCharm 建项目时,解释器选
miniconda/envs/ml-env目录即可接入该环境。
六、全文小结
本文核心结论:Python 的学习与使用,环境管理是第一步。
- 认知层:Python 是融合 OOP 与函数式的多范式语言,执行速度是其唯一显著短板,但开发效率收益通常更关键;存在 CPython / PyPy / Jython / IronPython 等多种实现。
- 原理层 :源码 → 字节码(
.pyc/__pycache__)→ PVM 执行;源文件或 Python 版本变更才触发重编译。- 实战层 :轻量隔离用
venv(五步法 +requirements.txt,优先以uv替代pip);数据科学 / AI 向用Anaconda/conda(配国内镜像提速、environment.yml导出分享环境)。- 环境就绪后,便可进入实际代码编写与 AI 学习环境实践。
| 维度 | 选 venv | 选 Conda |
|---|---|---|
| 适用场景 | 通用 Python 项目 | 数据科学 / AI |
| 依赖范围 | 仅 Python 包 | Python + 非 Python 依赖 |
| 上手成本 | 极低(内置) | 中(需装 Anaconda) |
| 分享方式 | requirements.txt |
environment.yml |