第四节 开发环境准备:安装 Python 及相关依赖库

环境搭不对,后面全白费。这话不是我说的,是我自己踩了三次坑才信了的。

做对象存储加密上传下载,核心依赖就三个:boto3(AWS SDK)、oss2(阿里云 OSS SDK)、cryptography(加密库)。当然你还得有个能跑 Python 的环境。咱们一步步来。

4.1 Python 版本选择

我个人习惯用 Python 3.8 及以上。boto3 和 oss2 从 3.6 就开始支持,但 cryptography 在 3.7 以下有些旧版编译问题,你想想看,编译不过去多耽误事。

经验之谈:别用系统自带的 Python 2.7,很多库已经停止支持了。我建议你至少装 Python 3.9,稳定又新。

怎么装?官网下载或者用包管理器。这里不展开了,你大概率已经装好了。

4.2 虚拟环境 —— 我的避风港

我曾经过度自信,直接在全局环境装了一堆库,结果项目 A 要 boto3 1.26,项目 B 要 1.20……冲突了。那个周末我花了两小时才理清。

所以,每个项目一个虚拟环境。用 Python 自带的 venv 就行,简单轻量。

# 创建虚拟环境
python -m venv encrypt_venv

# 激活(Windows)
encrypt_venv\Scripts\activate

# 激活(macOS / Linux)
source encrypt_venv/bin/activate

激活后你会看到终端前面多了 (encrypt_venv),说明成功。嗯,这里要注意,如果你用 conda 也可以,但我个人觉得 venv 够用了。

4.3 安装三大依赖库

直接一行搞定,但建议一个一个装,方便看出谁出了问题。

pip install boto3
pip install oss2
pip install cryptography

当然你也可以写进 requirements.txt 然后一次安装。但说真的,第一次装我建议你分开,好定位。

曾经踩过:我遇到过 pip 在代理或公司内网下超时。可以加 --default-timeout=100 或者换国内镜像源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple boto3

4.4 版本兼容性速查表

下面这张表是我从实际项目中整理出来的。不同 SDK 对加密库版本有隐性要求,记住我这句话:别混装太新的 beta 版。

库名 建议版本范围 说明
boto3 1.26.x – 1.34.x 覆盖 AWS S3 所有主流加密功能
oss2 2.15.x – 2.18.x 支持阿里云 KMS 和服务端加密
cryptography 39.x – 41.x 建议 41.0.7,pycryptodome 可作补充

你可能会问:为什么没有 pycryptodome?我用 cryptography 足够了,它封装的 OpenSSL 更安全,而且持续维护。

4.5 验证安装是否成功

装完了别急着跑,先验证。我在项目里遇到过装了半天,一 import 就报 ModuleNotFoundError,原来是激活了错误的环境。

python -c "import boto3; print('boto3', boto3.__version__)"
python -c "import oss2; print('oss2', oss2.__version__)"
python -c "from cryptography.fernet import Fernet; print('cryptography OK')"

如果能打印版本号,说明环境稳了。如果报错,检查一下是否在虚拟环境里,或者用 pip list 看看有没有装成别的名字。

4.6 配置凭证(密钥管理)

SDK 装好只是第一步。对象存储需要访问密钥:AWS 用 Access Key ID + Secret Access Key,阿里云用 AccessKey ID + Secret。说白了,这就是你云资源的钥匙。

我个人习惯用环境变量,避免硬编码在代码里。

# AWS
export AWS_ACCESS_KEY_ID=your_key_id
export AWS_SECRET_ACCESS_KEY=your_secret_key

# 阿里云
export OSS_ACCESS_KEY_ID=your_access_key_id
export OSS_ACCESS_KEY_SECRET=your_access_key_secret
安全提醒:别把密钥提交到 Git 仓库。我在一个项目中见过有人把 access key 写在注释里,结果被爬虫扫到,损失了 200 美元。从那以后,我所有的项目都加了 .gitignore 和 pre-commit 检查。

当然,AWS 还支持 ~/.aws/credentials 文件,阿里云也支持 ossutil 的配置文件。看你自己习惯。

4.7 一张图理清环境依赖关系

说了这么多,你可能有点绕。下面这张 SVG 图把整个开发环境的结构画清楚了。从操作系统往上,虚拟环境、三件套、再到你的项目代码——环节一个不能少。

开发环境依赖关系图 操作系统 (Windows / macOS / Linux) Python 3.8+ (解释器) 虚拟环境 (venv / conda) boto3 (AWS SDK) oss2 (阿里云 SDK) cryptography 加密库 你的加密上传下载项目 提示:所有库都装在虚拟环境里,互不干扰,安全第一

4.8 常见环境问题与解决方法

我整理了几个我自己踩过或者同事踩过的坑,你遇到了可以直接翻这表。

症状 原因 解决
ModuleNotFoundError: No module named 'cryptography' 装错了虚拟环境,或依赖没装全 激活正确环境,确认 pip list | grep cryptography 存在
ImportError: cannot import name 'Fernet' cryptography 版本太旧(< 3.0) pip install cryptography --upgrade
boto3 报错 NoCredentialsError 环境变量没配置,或配置了错误的 region 检查 echo $AWS_ACCESS_KEY_ID,或使用 aws configure
oss2 报错 'AccessDenied' AccessKey 权限不足或绑定了错误 Bucket 在 RAM 控制台授权,或确认 Bucket 名称
高级小技巧:你可以用一个简单的 Python 脚本来一键检测所有依赖是否就绪,避免手工检查的遗漏。

4.9 验证环境的完整脚本

我自己写了一个小检测器,放在项目根目录,每次部署前跑一遍。你可以直接拿走。

import sys
import importlib

required = ['boto3', 'oss2', 'cryptography']
missing = []

for lib in required:
    try:
        importlib.import_module(lib)
        print(f'✓ {lib} 已就绪')
    except ImportError:
        missing.append(lib)
        print(f'✗ {lib} 缺失,请执行 pip install {lib}')

if missing:
    sys.exit(1)
else:
    print('✅ 所有依赖安装成功,环境准备完成!')

把这个脚本扔进虚拟环境里跑一下,如果全部打勾,恭喜你,环境搭建完毕,可以开始加密上传下载的实战了。