第1章:Python环境准备
说实话,每次带新人入门运维自动化,我都要先跟他们聊Python环境。为什么?因为环境配不好,后面全是坑。我自己就吃过这个亏——刚转行做运维那会儿,直接在服务器上装了Python 2.7就开始写脚本,结果半年后项目要迁移,一堆代码跑不起来,那叫一个头疼。
所以这一章,咱们把环境准备这件事彻底聊透。你跟着我的节奏来,保证后面30章学起来顺风顺水。
1.1 Python版本选择:2 vs 3
这个问题现在其实没什么好纠结的了。Python 2在2020年1月1日就已经正式退休了。什么意思?就是官方不再维护,不再修bug,不再打安全补丁。
但我还是想多说两句,因为我在一些老牌公司的机房里,确实还见过跑着Python 2的遗留系统。如果你是新学运维自动化,直接选Python 3,没得商量。
核心建议:Python 3.8 到 3.11 是目前最稳妥的选择。3.12虽然新,但部分第三方库还没完全适配。
| 特性 | Python 2.7 | Python 3.x |
|---|---|---|
| 官方支持 | 已停止(2020年) | 持续更新 |
| print语法 | print "hello" | print("hello") |
| 字符串编码 | ASCII默认,中文易乱码 | Unicode默认,中文友好 |
| 第三方库生态 | 大量库已停止支持 | 主流库全面拥抱 |
我个人习惯用Python 3.10。为什么?因为它在性能和语法特性之间平衡得最好。你想想看,运维脚本要跑在各种各样的机器上,版本太新反而容易出兼容性问题。
小技巧:在服务器上可以用 python3 --version 检查版本。如果系统同时装了Python 2和3,建议用 python3 命令来调用,避免混淆。
1.2 虚拟环境:venv 与 pipenv
嗯,这里我要重点讲。虚拟环境这个东西,说白了就是给你的每个项目造一个独立的小房间。房间里装的Python版本、第三方库,都是这个项目专属的,不会跟别的项目打架。
我曾经在一个项目里同时维护着5个自动化脚本,有的依赖requests 2.25,有的依赖requests 2.28。如果没有虚拟环境,那简直就是灾难——升级一个,崩掉一片。
1.2.1 venv:Python自带的轻量方案
venv是Python 3.3以后自带的虚拟环境工具,不需要额外安装。我个人最常用它,因为简单、干净、没依赖。
# 创建虚拟环境
python3 -m venv myenv
# 激活虚拟环境(Linux/Mac)
source myenv/bin/activate
# 激活虚拟环境(Windows)
myenv\Scripts\activate
# 退出虚拟环境
deactivate
激活之后,你会发现命令行前面多了个 (myenv) 的标识。这时候你安装的任何包,都只在这个环境里生效。
注意:venv创建的虚拟环境不要提交到Git仓库。一般我们会把 myenv/ 加到 .gitignore 里。正确的做法是只保留 requirements.txt 文件。
1.2.2 pipenv:更现代化的选择
pipenv是Kenneth Reitz(就是写requests库那位大神)开发的。它把包管理和虚拟环境合二为一,用起来更省心。
# 安装pipenv
pip install pipenv
# 创建虚拟环境并安装包
pipenv install requests
# 激活虚拟环境
pipenv shell
# 生成依赖锁定文件
pipenv lock
pipenv会自动生成 Pipfile 和 Pipfile.lock 两个文件。前者记录依赖关系,后者锁定精确版本号。这在团队协作时特别有用——大家拉下代码,跑一句 pipenv install 就能复现一模一样的环境。
不过说实话,我个人觉得pipenv在大型项目里有点慢。如果你只是写几个简单的运维脚本,venv完全够用。但如果是团队协作的自动化平台项目,pipenv会更规范。
1.3 包管理基础:pip
pip是Python的包管理工具,全称是"Pip Installs Packages"。你写运维脚本,90%的第三方库都要靠它来装。
我记得刚入行时,有个老同事跟我说:"学会pip,你就学会了Python的一半。"当时觉得夸张,现在想想还真有道理。
# 安装包
pip install requests
# 安装指定版本
pip install requests==2.28.1
# 从文件批量安装
pip install -r requirements.txt
# 查看已安装的包
pip list
# 导出当前环境的包列表
pip freeze > requirements.txt
# 升级包
pip install --upgrade requests
# 卸载包
pip uninstall requests
避坑指南:我曾经在服务器上直接 pip install 装包,结果把系统自带的Python环境搞乱了,导致yum命令都报错。后来学乖了——永远在虚拟环境里用pip,别碰系统级Python。
还有一个常见问题:pip下载慢怎么办?国内用户建议配置清华或阿里云的镜像源。
# 临时使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
# 永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
1.4 IDE推荐:VS Code vs PyCharm
工欲善其事,必先利其器。写运维脚本用什么IDE?我两种都用过,说说我的真实感受。
| 特性 | VS Code | PyCharm |
|---|---|---|
| 启动速度 | 快(轻量级) | 慢(功能多) |
| 内存占用 | 约300MB | 约1GB+ |
| Python调试 | 需安装插件 | 开箱即用 |
| 远程开发 | 优秀(Remote SSH) | 需专业版 |
| 适合场景 | 轻量脚本、远程服务器 | 大型项目、团队协作 |
我个人习惯:写运维脚本用VS Code。为什么?因为运维经常要连到远程服务器上改脚本,VS Code的Remote SSH插件简直神器——本地写代码,远程执行,丝滑流畅。
但如果你是在做自动化运维平台,项目代码量很大,那PyCharm的代码分析、重构功能确实更强大。我见过不少运维开发团队,本地用PyCharm,服务器上只用vim改配置。
我的推荐:新手先用VS Code,装上Python插件和Remote SSH插件就够了。等写了几百行代码,觉得VS Code不够用了,再换PyCharm不迟。
好了,环境准备这部分就聊到这儿。你按照我说的把Python 3.10、venv、pip和VS Code配好,咱们下一章就开始写第一个自动化脚本了。
对了,配环境时遇到任何问题,别硬扛。我当年配个虚拟环境折腾了一下午,后来发现就是少打了个冒号。这种坑,踩过一次就记住了。