2. Python基础回顾与工程化准备:Python虚拟环境搭建(venv/conda)、常用科学计算库安装(numpy, scipy, matplotlib)、代码规范与类型注解、Git版本控制入门
好,咱们正式开始。这一章说白了,就是给后续的仿真开发打好地基。
你可能觉得Python基础谁不会啊?但我在项目里见过太多人,代码写得飞起,结果换台电脑就跑不起来了。为什么?环境乱套了。所以这一章,咱们重点解决「工程化」的问题——让你的代码在任何地方都能稳定运行。
2.1 为什么需要虚拟环境?
想象一下,你同时做两个项目。一个用numpy 1.19,另一个用numpy 1.24。如果装在一个全局环境里,早晚会冲突。我当年刚入行时就吃过这个亏——一个仿真项目突然报错,查了半天,原来是另一个项目升级了scipy版本。
虚拟环境就是给每个项目一个独立的Python解释器和包空间。互不干扰,干净利落。
2.2 使用venv创建虚拟环境
Python自带的venv模块,轻量又好用。我个人习惯用这个,因为不需要额外装工具。
# 创建虚拟环境(在项目根目录下执行)
python -m venv sim_env
# 激活环境(Windows)
sim_env\Scripts\activate
# 激活环境(Mac/Linux)
source sim_env/bin/activate
# 退出环境
deactivate
激活后,终端前面会出现 (sim_env) 的提示。嗯,看到这个就说明你已经在虚拟环境里了。
venv 或 sim_env。这样一眼就能看出来。
2.3 使用conda管理环境
如果你做科学计算比较多,conda可能更适合你。它不仅能管理Python包,还能管理非Python的依赖库(比如C++编译的库)。
# 创建环境
conda create -n sim_env python=3.9
# 激活环境
conda activate sim_env
# 安装包
conda install numpy scipy matplotlib
# 退出环境
conda deactivate
# 删除环境
conda env remove -n sim_env
我个人觉得,如果只是做纯Python开发,venv就够了。但如果你要装一些底层库(比如OpenCV、PyTorch),conda会更省心。
2.4 常用科学计算库安装
咱们做自动驾驶仿真,这三个库是标配:
- numpy:矩阵运算、数组操作。说白了,所有数据的基础容器。
- scipy:科学计算工具箱。插值、优化、信号处理,后面都会用到。
- matplotlib:数据可视化。画轨迹、画地图、画结果,全靠它。
# 一次性安装
pip install numpy scipy matplotlib
# 或者用conda
conda install numpy scipy matplotlib
安装完成后,可以验证一下:
import numpy as np
import scipy
import matplotlib.pyplot as plt
print(f"numpy版本: {np.__version__}")
print(f"scipy版本: {scipy.__version__}")
numpy==1.21.0,这样团队协作时不会出幺蛾子。
2.5 代码规范与类型注解
代码是写给人看的,顺便给机器执行。我见过太多「一次性代码」——写完自己都看不懂。所以从一开始,咱们就养成好习惯。
2.5.1 PEP 8 基本规范
- 缩进用4个空格,不要用Tab
- 每行不超过79个字符
- 函数和类之间空两行
- 变量命名用下划线分隔(snake_case)
- 类名用驼峰命名(CamelCase)
2.5.2 类型注解
Python是动态语言,但加上类型注解后,代码的可读性和可维护性会大幅提升。说白了,就是告诉别人(也告诉自己)这个函数要什么参数、返回什么类型。
from typing import List, Tuple, Optional
import numpy as np
def calculate_path_length(
waypoints: np.ndarray,
start_idx: int = 0,
end_idx: Optional[int] = None
) -> float:
"""
计算路径总长度
Args:
waypoints: 路径点数组,形状为 (N, 2)
start_idx: 起始点索引
end_idx: 结束点索引,默认为最后一个点
Returns:
路径总长度
"""
if end_idx is None:
end_idx = waypoints.shape[0] - 1
segment_lengths = np.diff(waypoints[start_idx:end_idx+1], axis=0)
total_length = np.sum(np.linalg.norm(segment_lengths, axis=1))
return float(total_length)
你看,加了类型注解和docstring,这个函数的作用一目了然。我在团队里推行这个习惯后,代码review的效率提高了不少。
2.6 Git版本控制入门
没有Git的代码项目,就像没有刹车的车——你敢开吗?
我刚开始做仿真时,代码改来改去,最后都不知道哪个版本能跑。直到学会了Git,才真正解放了生产力。
2.6.1 基本配置
# 设置用户名和邮箱(第一次使用)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看配置
git config --list
2.6.2 常用命令
| 命令 | 作用 | 我常用的场景 |
|---|---|---|
git init |
初始化仓库 | 新建项目时 |
git add . |
添加所有改动到暂存区 | 写完一个功能模块后 |
git commit -m "消息" |
提交改动 | 每次提交都写清楚改了啥 |
git status |
查看当前状态 | 不确定改了哪些文件时 |
git log |
查看提交历史 | 回溯问题时 |
git diff |
查看具体改动 | review代码时 |
2.6.3 实战流程
# 1. 初始化项目
cd my_sim_project
git init
# 2. 创建 .gitignore 文件(忽略虚拟环境等)
echo "sim_env/" >> .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore
# 3. 添加并提交
git add .
git commit -m "初始化项目:搭建虚拟环境与基础配置"
# 4. 后续开发
# 改完代码后
git add .
git commit -m "添加路径规划模块:实现A*算法"
2.7 本章知识体系
下面这张图,帮你理清这一章的核心逻辑:
这一章的内容,说白了就是四个字:打好地基。虚拟环境保证运行环境一致,科学计算库提供工具,代码规范让团队协作顺畅,Git让你敢改代码、能回溯。这些看似基础的东西,恰恰是后续所有仿真开发的前提。
嗯,准备好了吗?下一章咱们就开始动手写真正的仿真代码了。
可可精品资料库