第4章 Python环境搭建:版本选择、虚拟环境与依赖管理

做量产烧录脚本,Python环境是第一道坎。我见过太多人在这上面栽跟头——版本不对、依赖冲突、打包后跑不起来。说白了,环境搭不好,后面写得再漂亮也是白搭。

这一章,我把这几年踩过的坑、积累的经验都摊开来讲。你跟着做,基本不会出问题。

4.1 Python版本怎么选?

先给结论:量产烧录脚本,我推荐用Python 3.8或3.10。

为什么不是最新的3.12?你想想看,烧录脚本要跑在产线工位上,那些工控机可能还是Windows 7或者Ubuntu 18.04。Python 3.12对旧系统的支持已经砍了不少,到时候装不上就尴尬了。

我个人的选择标准是这样的:

场景 推荐版本 原因
新项目、新产线 Python 3.10 性能好,语法特性够用,生态成熟
老旧工控机(Win7/Ubuntu 16.04) Python 3.8 兼容性最好,pyinstaller打包稳定
团队已有项目 跟项目保持一致 别给自己找麻烦
注意:千万别用Python 2.7!虽然有些老产线还在用,但2020年就停止维护了。我曾经接手过一个用Python 2写的烧录脚本,光是迁移就花了两周,那滋味……嗯,你懂的。

4.2 虚拟环境——每个项目一个“小房间”

你有没有遇到过这种情况:项目A需要pyserial 3.4,项目B需要pyserial 3.0,装来装去把系统搞崩了?

虚拟环境就是解决这个问题的。它给每个项目创建一个独立的Python环境,互不干扰。

4.2.1 venv——Python自带的方案

从Python 3.3开始,venv就是标准库的一部分了。不需要额外安装,直接用:

# 创建虚拟环境
python -m venv myenv

# 激活(Windows)
myenv\Scripts\activate

# 激活(Linux/Mac)
source myenv/bin/activate

# 退出
deactivate

激活后,命令行前面会出现 (myenv) 提示符。这时候你装的所有包都只在这个环境里生效。

我的习惯:每个项目根目录下建一个 .venv 文件夹,然后加到 .gitignore 里。这样既不会污染代码仓库,团队成员也知道环境在哪。

4.2.2 为什么我后来改用Poetry?

venv虽然简单,但有个痛点:依赖管理全靠手写requirements.txt。项目大了以后,版本冲突、依赖嵌套,查起来特别头疼。

Poetry把虚拟环境创建、依赖管理、打包发布全包了。它用 pyproject.toml 统一管理配置,还自动生成 poetry.lock 锁定版本。

安装Poetry:

# 推荐方式(避免污染系统Python)
curl -sSL https://install.python-poetry.org | python3 -

# 或者用pip
pip install poetry

初始化项目:

poetry new my-flash-tool
cd my-flash-tool
poetry add pyserial pyusb
poetry add --dev pytest pyinstaller

看看生成的 pyproject.toml:

[tool.poetry]
name = "my-flash-tool"
version = "0.1.0"
description = "量产烧录脚本"
authors = ["Your Name"]

[tool.poetry.dependencies]
python = "^3.10"
pyserial = "^3.5"
pyusb = "^1.2"

[tool.poetry.dev-dependencies]
pytest = "^7.0"
pyinstaller = "^5.0"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

核心优势:

  • 自动解析依赖树,避免版本冲突
  • lock文件锁定所有依赖的精确版本,团队一致
  • 一条命令就能发布到PyPI
  • 内置虚拟环境管理,不用手动激活

4.3 依赖管理实战——从requirements.txt到Poetry

先看看传统方式怎么做的:

# requirements.txt
pyserial==3.5
pyusb==1.2.0
pywin32==305; platform_system == "Windows"
pyside6==6.5.0

安装:

pip install -r requirements.txt

这种方式的问题在于:你没法保证不同机器上装的是完全一样的版本。特别是那些没有指定精确版本的包,今天装和明天装可能就不一样了。

用Poetry就简单多了:

# 添加依赖
poetry add "pyserial>=3.5,<4.0"

# 安装所有依赖(包括dev)
poetry install

# 只安装生产依赖
poetry install --only main

# 更新依赖
poetry update

Poetry会自动生成 poetry.lock,把这个文件提交到Git里,团队所有人装出来的环境一模一样。

踩坑提醒:我曾经在一个产线项目里,团队成员用pip装了不同版本的pyusb,结果烧录成功率差了5%。查了两天才发现是依赖版本不一致。从那以后,我所有项目都强制用Poetry + lock文件。

4.4 IDE推荐——工欲善其事,必先利其器

写烧录脚本,IDE选对了能省一半时间。我主要用两个:VS Code和PyCharm。

4.4.1 VS Code——轻量、灵活、免费

如果你经常要在不同项目间切换,或者电脑配置一般,VS Code是首选。

必装插件:

  • Python(微软官方)——语法高亮、智能提示、调试
  • Pylance——类型检查,能提前发现很多低级错误
  • Poetry——在VS Code里直接管理Poetry环境
  • GitLens——看代码是谁写的、什么时候改的

配置虚拟环境:

// settings.json
{
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/Scripts/python.exe",
  "python.terminal.activateEnvironment": true,
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": true
}

4.4.2 PyCharm——功能全面、开箱即用

PyCharm的社区版免费,专业版要钱。但说实话,写烧录脚本社区版完全够用。

PyCharm的优势:

  • 内置数据库工具——调试时直接看SQLite数据
  • 强大的重构功能——改个变量名,所有引用自动更新
  • 远程开发——可以连到产线工控机上调试

我个人是VS Code和PyCharm混着用。写小工具用VS Code,做大项目用PyCharm。没有绝对的好坏,顺手就行。

4.5 本章知识体系

下面这张图把Python环境搭建的核心逻辑串起来了:

Python环境搭建知识体系 Python版本选择 虚拟环境 (venv) 依赖管理 (pip) IDE选择 venv操作 • python -m venv .venv • source .venv/bin/activate • deactivate pip + requirements.txt • pip freeze > requirements.txt • pip install -r requirements.txt • 缺点:版本锁定不严格 VS Code / PyCharm • VS Code:轻量、插件丰富 • PyCharm:功能全面、重构强 • 都支持Poetry集成 Poetry:统一虚拟环境 + 依赖管理 核心原则:每个项目独立环境,依赖版本精确锁定,团队保持一致

4.6 我的推荐配置清单

如果你不想纠结,直接照这个来:

  1. Python 3.10——装到 C:\Python310 或 /usr/local/python3.10
  2. Poetry——全局安装,每个项目独立环境
  3. VS Code + Python插件 + Pylance
  4. 项目根目录建 .venv,加到 .gitignore
  5. 用 poetry add 管理所有依赖

一个小技巧:在VS Code里按 Ctrl+Shift+P,输入 Python: Select Interpreter,选择 .venv 里的Python解释器。这样终端、调试器、代码提示都会自动用虚拟环境。