第一章:开发环境搭建
说实话,我见过太多运维新手,一上来就急着写脚本。
结果呢?Python版本冲突、依赖包乱成一锅粥、IDE连语法高亮都没有。
嗯,这些坑我都踩过。今天咱们就把环境搭好,后面写代码才顺手。
1.1 Python版本选择:别纠结,选3.8+
Python 2已经在2020年退休了。我个人习惯直接上Python 3.8以上版本。
为什么?因为3.6以下的一些语法糖(比如f-string)在3.8里才真正稳定。我在项目中遇到过,用3.6写的脚本,部署到3.8环境反而报了个小警告——虽然能跑,但看着不舒服。
我的建议:
- 新项目:直接用Python 3.10或3.11
- 老项目维护:保持原版本,别乱升
- 生产环境:3.8+ 最稳妥
你想想看,运维脚本要跑在几十台服务器上,版本统一比什么都重要。
1.2 虚拟环境管理:别把依赖搞成一锅粥
我刚开始做运维时,所有包都装全局。结果呢?项目A需要paramiko 2.x,项目B需要paramiko 3.x,直接冲突到崩溃。
后来我学乖了——每个项目一个虚拟环境。
venv:Python自带的轻量方案
# 创建虚拟环境
python3 -m venv myenv
# 激活(Linux/Mac)
source myenv/bin/activate
# 激活(Windows)
myenv\Scripts\activate
# 退出
deactivate
venv够用,但有个缺点:依赖管理全靠requirements.txt,版本锁定不够精细。
pipenv:更现代的方案
我个人更推荐pipenv。它自动生成Pipfile和Pipfile.lock,锁定所有依赖的精确版本。
# 安装pipenv
pip install pipenv
# 创建虚拟环境并安装依赖
pipenv install paramiko fabric
# 激活环境
pipenv shell
# 生成requirements.txt(给同事用)
pipenv lock -r > requirements.txt
小技巧: 我习惯把Pipfile.lock提交到Git仓库。这样团队所有人都用一模一样的依赖版本,避免「在我机器上能跑」的尴尬。
1.3 IDE推荐与配置
工欲善其事,必先利其器。我试过七八种编辑器,最后常驻两个:VS Code和PyCharm。
VS Code:轻量、插件丰富
我日常写脚本用VS Code居多。装上这几个插件,体验直接起飞:
| 插件名 | 作用 |
|---|---|
| Python | 语法高亮、智能补全、调试 |
| Pylance | 类型检查、代码分析(比默认的强太多) |
| Remote - SSH | 直接连远程服务器写代码,爽 |
| GitLens | 看代码谁写的、什么时候改的 |
注意: 记得在VS Code里设置Python解释器路径为虚拟环境。按Ctrl+Shift+P,输入"Python: Select Interpreter",选你刚创建的虚拟环境。否则你装的包全白费。
PyCharm:重型武器
做大项目时,我会切到PyCharm。它的调试器、重构工具、数据库工具,确实比VS Code强。
不过PyCharm比较吃内存。我建议至少16GB内存的机器再装它。
1.4 必备工具包安装
运维自动化绕不开这三个库。我按使用频率排个序:
paramiko:SSH连接的基石
说白了,它就是Python版的SSH客户端。执行远程命令、传文件,全靠它。
pip install paramiko
简单示例:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='root', password='your_password')
stdin, stdout, stderr = ssh.exec_command('df -h')
print(stdout.read().decode())
ssh.close()
避坑指南: 我曾经在生产环境直接用密码登录,结果密码泄露了。后来全部改用密钥认证:
ssh.connect('host', username='user', key_filename='/path/to/private_key')
fabric:批量操作神器
如果你要在100台服务器上执行同一个命令,用paramiko写循环太累。fabric封装了这些操作。
pip install fabric
看,多简洁:
from fabric import Connection
c = Connection('web01', user='root', connect_kwargs={'key_filename': '/path/key'})
result = c.run('uptime')
print(result.stdout)
批量操作时,配合ThreadPoolExecutor,效率翻倍。
ansible:基础设施即代码
ansible严格来说不算Python库,而是一个自动化工具。但它的底层是Python,我们可以在脚本里调用它。
pip install ansible
我通常用它做配置管理和应用部署。比如一键安装Nginx:
- name: Install Nginx
hosts: webservers
tasks:
- name: Install nginx
apt:
name: nginx
state: present
我的经验: 这三个工具不是互斥的。我通常这样分工:
- 临时任务、快速脚本 → paramiko
- 批量执行、日常巡检 → fabric
- 标准化部署、配置管理 → ansible
1.5 本章知识体系
下面这张图,是我梳理的环境搭建核心逻辑:
环境搭好了,后面写脚本才能行云流水。别急,下一章咱们就开始写第一个自动化脚本。
公众号:蓝海资料掘金营,微信deep3321