环境搭建——从零跑通第一个自动化脚本
第1章:环境搭建——从零跑通第一个自动化脚本
一个好的开发环境能让你少踩90%的坑。本章从 Python 版本选择讲起,逐步完成虚拟环境、编辑器、包管理的完整配置,最后用一个真实的自动化脚本验证整个环境。跟着本章完成配置,后续所有章节的代码都能直接运行。
Python 版本选择
写这本书时,Python 的稳定版本是 3.11 和 3.12。推荐选择 Python 3.11——它在性能上比 3.10 有大幅提升(官方测试平均快 25%),而且第三方库的兼容性已经非常成熟。3.12 也可以,但部分旧库可能还未适配。
**为什么不用 3.9 以下版本?**三个主要原因:
- Python 3.10 引入了
match-case语句(结构化模式匹配),3.10+ 的类型提示语法更简洁(int | None代替Optional[int]) - Python 3.8 已于2024年10月停止官方安全支持,生产环境不应继续使用
- 大量现代自动化库(如 Playwright、新版 pandas)的最低要求是 Python 3.9+
**查看当前版本:**在终端运行
python3 --version(macOS/Linux)或python --version(Windows),确认版本号。如果已经是 3.11+,可以跳过安装步骤。
安装方式对比
| 安装方式 | 适用场景 | 优点 | 注意事项 |
|---|---|---|---|
| 官网安装包 python.org | Windows、初学者 | 最简单直接,安装向导傻瓜式 | Windows 安装时务必勾选"Add Python to PATH" |
| Homebrew (Mac) | macOS 开发者 | 版本管理方便,brew upgrade python 一键升级 |
需先安装 Homebrew(brew.sh) |
| winget (Windows) | Windows 10/11 开发者 | 命令行安装,方便脚本化 | 需要 Windows 10 2004+ 版本 |
| conda/miniconda | 数据科学、需要管理多Python版本 | 环境隔离彻底,科学计算包预装 | 比 venv 重,不必要时不推荐 |
| pyenv | 需要同时维护多版本 Python | 多版本切换灵活 | 配置稍复杂,推荐有经验后再用 |
**推荐选择:**Windows 用官网安装包,macOS 用 Homebrew。这两种方式最省事。
虚拟环境:为什么必须用 venv
虚拟环境(virtual environment)是 Python 自动化开发中最重要的习惯之一。很多初学者跳过这一步,然后掉进一个非常经典的坑:不同项目依赖的库版本冲突。
想象这个场景:项目A需要 requests==2.28,项目B需要 requests==2.31。如果你把所有包都装在全局 Python 环境里,这两个版本会互相覆盖,总有一个项目跑不起来。
venv 的作用:为每个项目创建一个独立的 Python 环境,各自安装各自的依赖,互不干扰。
创建和激活虚拟环境
macOS / Linux
# 在项目目录下创建虚拟环境(名称约定为 .venv)
python3 -m venv .venv
# 激活虚拟环境
source .venv/bin/activate
# 激活后,命令行提示符会变为 (.venv) 开头
# 此时安装的包都在 .venv/ 目录内,不影响全局环境
# 退出虚拟环境
deactivate
Windows CMD
# 创建虚拟环境
python -m venv .venv
# 激活虚拟环境(CMD)
.venv\Scripts\activate.bat
# 激活虚拟环境(PowerShell)
.venv\Scripts\Activate.ps1
# 退出
deactivate
**Windows PowerShell 执行策略:**如果激活脚本提示"无法加载脚本,因为在此系统上禁止运行脚本",在管理员 PowerShell 中运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser,然后重试。
VS Code 配置
VS Code 是目前 Python 自动化开发最推荐的编辑器。免费、跨平台、生态完善。
必装插件
- Python(Microsoft 官方):语法高亮、IntelliSense、调试支持
- Pylance:高级类型检查和自动补全,比默认 Python 插件更智能
- Ruff:极快的 Python linter + formatter,取代 Black + flake8
- GitLens:版本控制增强,方便查看代码历史
选择虚拟环境解释器
安装好 Python 插件后:按 Ctrl+Shift+P(Mac:Cmd+Shift+P)打开命令面板,输入 Python: Select Interpreter,选择 .venv/bin/python(或 Windows 上的 .venv\Scripts\python.exe)。VS Code 会自动使用这个虚拟环境运行脚本。
调试配置 launch.json
在项目根目录创建 .vscode/launch.json,内容如下。保存后按 F5 即可调试当前文件,支持断点、变量查看、单步执行:
JSON — .vscode/launch.json
{"version":"0.2.0","configurations":[{"name":"Python: 当前文件","type":"debugpy","request":"launch","program":"${file}","console":"integratedTerminal","justMyCode":true,"env":{"PYTHONPATH":"${workspaceFolder}"}}]}
包管理:pip 与 requirements.txt
pip 常用命令
Shell
pip install requests # 安装包
pip install requests==2.31.0 # 指定版本
pip install requests openpyxl pandas # 多个包
pip list # 查看已安装的包
pip install --upgrade pip # 升级 pip 本身
# 导出当前环境依赖(在新环境中 pip install -r requirements.txt 恢复)
pip freeze > requirements.txt
**pip-tools 进阶:**对于复杂项目,推荐使用
pip-tools。它区分"直接依赖"(requirements.in)和"锁定版本"(requirements.txt),解决间接依赖冲突问题。安装:pip install pip-tools,使用:pip-compile requirements.in。
第一个自动化脚本:批量创建项目目录结构
理论讲完,动手写第一个真实可用的自动化脚本。场景:你每次新建项目都要手动创建同样的目录结构(src、tests、docs、logs……),现在用 Python 一键完成。
Python 3.11+
"""
create_project.py — 批量创建项目目录结构
用法: python create_project.py my-project
"""
import sys
import argparse
from pathlib import Path
from datetime import datetime
# 定义标准项目目录结构
# 列表中以 "/" 结尾的是目录,其余是文件模板
PROJECT_TEMPLATE = [
"src/",
"src/__init__.py",
"tests/",
"tests/__init__.py",
"tests/test_main.py",
"docs/",
"logs/",
"data/input/",
"data/output/",
".gitignore",
"requirements.txt",
"README.md",
]
# .gitignore 的默认内容
GITIGNORE_CONTENT = """\
# Python
__pycache__/
*.py[cod]
*.pyo
.venv/
*.egg-info/
dist/
build/
# 日志和数据
logs/
data/output/
# 编辑器
.vscode/
.idea/
*.swp
"""
# README 模板
README_TEMPLATE = """\
# {project_name}
创建时间: {created_at}
## 项目结构
{project_name}/ ├── src/ # 源代码 ├── tests/ # 测试文件 ├── docs/ # 文档 ├── logs/ # 运行日志(自动生成,不提交 git) └── data/ ├── input/ # 输入数据 └── output/ # 输出结果(不提交 git)
## 快速开始
```bash
# 创建虚拟环境
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
# 安装依赖
pip install -r requirements.txt
"""
def create_project(project_name: str, base_dir: Path = Path(".")) -> Path: """ 在 base_dir 下创建名为 project_name 的项目目录结构。
Args:
project_name: 项目名称(将成为顶层目录名)
base_dir: 在哪个目录下创建项目,默认为当前目录
Returns:
创建的项目根目录的 Path 对象
"""
project_root = base_dir / project_name
# 检查项目目录是否已存在
if project_root.exists():
print(f"错误: 目录 '{project_root}' 已存在,请换一个名称或手动删除后重试。")
sys.exit(1)
print(f"正在创建项目: {project_name}")
created_count = 0
for item in PROJECT_TEMPLATE:
target = project_root / item
if item.endswith("/"):
# 创建目录(包括中间层级)
target.mkdir(parents=True, exist_ok=True)
print(f" [目录] {item}")
else:
# 创建文件,先确保父目录存在
target.parent.mkdir(parents=True, exist_ok=True)
# 根据文件类型写入预设内容
if item == ".gitignore":
target.write_text(GITIGNORE_CONTENT, encoding="utf-8")
elif item == "README.md":
content = README_TEMPLATE.format(
project_name=project_name,
created_at=datetime.now().strftime("%Y-%m-%d")
)
target.write_text(content, encoding="utf-8")
else:
# 其他文件创建为空文件
target.touch()
print(f" [文件] {item}")
created_count += 1
print(f"\n项目创建完成!")
print(f" 位置: {project_root.resolve()}")
print(f" 创建了 {created_count} 个文件")
print(f"\n下一步:")
print(f" cd {project_name}")
print(f" python3 -m venv .venv")
print(f" source .venv/bin/activate")
return project_root
def main(): parser = argparse.ArgumentParser( description="快速创建标准 Python 项目目录结构" ) parser.add_argument("project_name", help="项目名称(将成为目录名)") parser.add_argument( "--dir", type=Path, default=Path("."), help="在哪个目录下创建项目(默认:当前目录)" )
args = parser.parse_args()
create_project(args.project_name, args.dir)
if name == "main": main()
### 运行脚本
Shell
```python
# 创建名为 "my-automation" 的项目
python create_project.py my-automation
# 在指定目录下创建
python create_project.py my-automation --dir ~/projects
**恭喜!**你刚刚完成了第一个真实的自动化脚本。这段代码用到了
pathlib.Path(路径操作)、argparse(命令行参数)、sys.exit(错误退出)——这些都是后续章节的高频工具。如果能顺利运行,说明你的环境配置完全正确。
代码解析:本章用到的关键模块
-
pathlib.Path:Python 3.4+ 的现代路径处理方式,跨平台,比
os.path更优雅。mkdir(parents=True)会自动创建中间目录。 -
argparse:标准库里的命令行参数解析模块,让脚本支持
--help、参数校验、默认值。 -
类型提示:
project_name: str、base_dir: Path、-> Path——这是本书全程使用的写法,让代码意图更清晰,IDE 也能提供更好的补全。上一章
下一章 第2章:自动化必知的核心语法