4. 脚本化自动化概述
好,咱们正式开始动手了。量产烧录脚本,说白了就是用 Python 去控制烧录器、解析固件、处理日志。所以 Python 环境就是你的工作台。工作台搭不好,后面全是坑。
我个人习惯,不管项目大小,先把环境理干净。别图省事直接在系统 Python 里 pip install 一堆包,到时候版本冲突哭都来不及。今天咱们就把解释器、虚拟环境、pip 源、依赖管理这几个事一次性说清楚。
本章核心目标:搭建一个干净、可复现、不污染系统的 Python 开发环境,为后续量产脚本开发打好地基。
4.1 Python 解释器安装
先选版本。量产脚本我建议用 Python 3.8 到 3.11 之间。为什么?因为很多烧录器的 SDK 或者底层串口库,对 3.12、3.13 的支持还不稳定。我在项目中遇到过,升级到 Python 3.12 后,某个老款烧录器的 pySerial 驱动直接报错,折腾了半天才找到原因。
下载地址就是官网:python.org。别去其他地方下,安全第一。
安装时有个关键点——勾选 "Add Python to PATH"。我见过太多新手没勾这个,后面命令行敲 python 提示找不到,又去配环境变量,白白浪费时间。
| 操作系统 | 推荐版本 | 安装注意事项 |
|---|---|---|
| Windows | Python 3.10.x | 勾选 PATH;选择 "Install for all users" |
| macOS | Python 3.11.x | 用官方安装包,别用系统自带 |
| Linux (Ubuntu) | Python 3.10.x | 用 deadsnakes PPA 或源码编译 |
装完之后,打开终端验证一下:
python --version
# 输出示例:Python 3.10.12
pip --version
# 输出示例:pip 24.0 from ...
嗯,看到版本号就说明装好了。如果提示找不到命令,回去检查 PATH 勾选没。
4.2 虚拟环境配置
虚拟环境这东西,说白了就是给你的每个项目建一个独立的小房间。房间里装的 Python 版本、第三方库,跟外面互不干扰。
我刚开始做量产脚本时,一个项目用 pySerial 3.5,另一个项目用 pySerial 3.7,结果两个库打架,修了半天。后来老老实实用虚拟环境,再没出过这种问题。
4.2.1 使用 venv(Python 内置)
Python 3.3 以后自带了 venv,不用额外装。我个人最常用这个,轻量、干净。
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS / Linux:
source venv/bin/activate
# 看到终端前面多了 (venv) 就对了
(venv) $
激活后,你 pip install 的所有包都会装到这个 venv 目录里,不会动系统 Python。
小技巧:把 venv 目录加到 .gitignore 里。虚拟环境不提交到代码仓库,别人拉下来自己建就行。
4.2.2 使用 virtualenv(更强大)
如果你需要指定 Python 版本,或者想用更快的包管理器,可以用 virtualenv。它比 venv 灵活一些。
pip install virtualenv
# 指定 Python 3.10 创建环境
virtualenv -p python3.10 myenv
source myenv/bin/activate
不过说实话,量产脚本场景下,venv 完全够用。除非你要同时维护 Python 2 和 3 的兼容,才需要上 virtualenv。
4.3 pip 换源与加速
pip 默认从国外 PyPI 服务器下载包,速度嘛……你懂的。尤其量产现场,网络环境可能很差,等一个包下载等十分钟,心态直接崩。
所以换源是必须的。国内常用的镜像源有这几个:
| 镜像源名称 | URL | 推荐指数 |
|---|---|---|
| 清华大学 TUNA | https://pypi.tuna.tsinghua.edu.cn/simple | ⭐⭐⭐⭐⭐ |
| 阿里云 | https://mirrors.aliyun.com/pypi/simple | ⭐⭐⭐⭐ |
| 中国科学技术大学 USTC | https://pypi.mirrors.ustc.edu.cn/simple | ⭐⭐⭐⭐ |
| 华为云 | https://repo.huaweicloud.com/repository/pypi/simple | ⭐⭐⭐ |
配置方法有两种:临时换源和永久换源。
4.3.1 临时换源
安装时加 -i 参数就行:
pip install pyserial -i https://pypi.tuna.tsinghua.edu.cn/simple
适合偶尔用一次的场景。
4.3.2 永久换源
写配置文件,一劳永逸。在用户目录下创建 pip.conf(Linux/macOS)或 pip.ini(Windows):
# Linux/macOS: ~/.pip/pip.conf
# Windows: %USERPROFILE%\pip\pip.ini
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
配置好之后,pip install 默认就走清华源了。速度从几十 KB/s 直接飙到几 MB/s。
注意:有些公司内网会屏蔽镜像源。如果你在公司环境,先确认能不能访问镜像站。我曾经在客户现场,内网连外网都走代理,pip 装包各种超时,最后只能离线安装。
4.4 依赖管理:requirements.txt
量产脚本通常要依赖好几个库:pySerial、pyusb、crcmod、tqdm 等等。你不能每次都手动 pip install 一个个装,太原始了。
标准做法是用 requirements.txt 文件记录所有依赖。
4.4.1 生成 requirements.txt
在虚拟环境激活状态下,执行:
pip freeze > requirements.txt
打开看看,内容大概是这样:
pyserial==3.5
pyusb==1.2.0
crcmod==1.7
tqdm==4.66.1
colorama==0.4.6
每一行是 包名==版本号。这样别人拿到你的代码,一条命令就能装好所有依赖。
4.4.2 从 requirements.txt 安装
pip install -r requirements.txt
就这么简单。我一般在量产脚本的 README 里直接写这条命令,现场工程师照着敲就行,不用动脑子。
4.4.3 版本锁定 vs 宽松版本
这里有个讲究。生产环境我建议锁定版本号,比如 pyserial==3.5。为什么?因为 pySerial 3.6 改了某个内部接口,你的脚本可能就炸了。
但如果你在开发阶段,可以用宽松写法:
pyserial>=3.5,<4.0
pyusb>=1.0,<2.0
这样 pip 会自动选符合范围的最新版本。
我的建议:开发用宽松版本,发布前跑一遍 pip freeze 锁定版本,生成正式的 requirements.txt。这样既灵活又稳定。
4.5 本章知识体系总览
下面这张图把 Python 环境搭建的完整流程串起来了。从安装解释器,到创建虚拟环境,再到配置 pip 源和管理依赖,每一步都有对应关系。
4.6 常见问题与避坑
最后聊几个我踩过的坑,你遇到了直接照着修就行。
- pip 版本太旧:有时候 pip install 报错,先升级 pip 试试。
python -m pip install --upgrade pip - 虚拟环境激活失败:Windows 上如果提示 "无法加载文件",用管理员权限打开 PowerShell,执行
Set-ExecutionPolicy Unrestricted解除限制。 - 换源后还是慢:检查是不是走了代理。取消代理试试:
unset http_proxy和unset https_proxy。 - requirements.txt 里有本地路径:如果你用
pip install -e .安装过本地包,pip freeze 会生成-e开头的行。这种要手动处理,或者用pip list --format=freeze替代。
重要提醒:量产现场用的电脑,Python 环境一定要提前准备好,别到产线上了才装包。我见过最惨的一次,客户产线网络断了,离线包又没带,硬生生耽误了半天。提前把 requirements.txt 和离线包都准备好,有备无患。