第 1 章

环境搭建——从零跑通第一个自动化脚本

第1章:环境搭建——从零跑通第一个自动化脚本

一个好的开发环境能让你少踩90%的坑。本章从 Python 版本选择讲起,逐步完成虚拟环境、编辑器、包管理的完整配置,最后用一个真实的自动化脚本验证整个环境。跟着本章完成配置,后续所有章节的代码都能直接运行。

Python 版本选择

写这本书时,Python 的稳定版本是 3.11 和 3.12。推荐选择 Python 3.11——它在性能上比 3.10 有大幅提升(官方测试平均快 25%),而且第三方库的兼容性已经非常成熟。3.12 也可以,但部分旧库可能还未适配。

**为什么不用 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 插件后:按 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(错误退出)——这些都是后续章节的高频工具。如果能顺利运行,说明你的环境配置完全正确。

代码解析:本章用到的关键模块

本章评分
4.7  / 5  (96 评分)

💬 留言讨论