第一章:开发环境搭建

说实话,我见过太多运维新手,一上来就急着写脚本。

结果呢?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 本章知识体系

下面这张图,是我梳理的环境搭建核心逻辑:

运维自动化开发环境搭建 Python 3.8+ 虚拟环境管理 IDE配置 paramiko(SSH) fabric(批量) ansible(配置) 应用场景 临时任务 → paramiko | 批量巡检 → fabric | 标准化部署 → ansible

环境搭好了,后面写脚本才能行云流水。别急,下一章咱们就开始写第一个自动化脚本。


公众号:蓝海资料掘金营,微信deep3321