第四节 开发环境准备:安装 Python 及相关依赖库
环境搭不对,后面全白费。这话不是我说的,是我自己踩了三次坑才信了的。
做对象存储加密上传下载,核心依赖就三个:boto3(AWS SDK)、oss2(阿里云 OSS SDK)、cryptography(加密库)。当然你还得有个能跑 Python 的环境。咱们一步步来。
4.1 Python 版本选择
我个人习惯用 Python 3.8 及以上。boto3 和 oss2 从 3.6 就开始支持,但 cryptography 在 3.7 以下有些旧版编译问题,你想想看,编译不过去多耽误事。
怎么装?官网下载或者用包管理器。这里不展开了,你大概率已经装好了。
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 然后一次安装。但说真的,第一次装我建议你分开,好定位。
--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
当然,AWS 还支持 ~/.aws/credentials 文件,阿里云也支持 ossutil 的配置文件。看你自己习惯。
4.7 一张图理清环境依赖关系
说了这么多,你可能有点绕。下面这张 SVG 图把整个开发环境的结构画清楚了。从操作系统往上,虚拟环境、三件套、再到你的项目代码——环节一个不能少。
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 名称 |
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('✅ 所有依赖安装成功,环境准备完成!')
把这个脚本扔进虚拟环境里跑一下,如果全部打勾,恭喜你,环境搭建完毕,可以开始加密上传下载的实战了。