4. 环境准备:操作系统、Python版本与权限预检
说实话,很多新手在做云数据发现SDK接入时,第一步就卡在环境上。代码还没写,光装依赖就折腾半天。我呢,习惯先把环境捋清楚,再动手写代码。这样出了错,至少知道是哪里的问题。
这一章我们就来聊聊——你电脑上到底需要什么,才能跑起我们的敏感资产识别Demo。
4.1 操作系统要求
我推荐你用 Linux(CentOS 7+ 或 Ubuntu 18.04+)。为什么?因为云上生产环境几乎全是Linux,你本地跑通了,上云才不会出现“在我电脑上明明可以”的尴尬。
Windows呢?也不是不行。但我在项目里遇到过几次:Windows下的文件路径分隔符、换行符跟Linux不统一,导致SDK读取配置文件时死活找不到路径。哎,折腾了大半天。所以如果你非用Windows不可,记得用 WSL2(Windows Subsystem for Linux)或者Docker来跑。
macOS的用户就比较舒服了——类Unix内核,基本上跟Linux没太大差别。我个人最近几年一直用macOS开发,体验不错。
| 操作系统 | 推荐版本 | 我的建议 |
|---|---|---|
| Ubuntu | 18.04 / 20.04 / 22.04 | 首选,软件源全 |
| CentOS / RHEL | 7.9+ / 8+ | 生产环境最常见 |
| macOS | Catalina (10.15)+ | 开发友好,推荐 |
| Windows | 10 / 11 + WSL2 | 必须用WSL2,别直接跑 |
4.2 Python版本依赖
这个SDK是基于Python 3写的。我建议你用 Python 3.8 ~ 3.11。低于3.8的话,很多语法糖用不了;高于3.11呢,某些第三方库还没完全适配,容易踩坑。
我有个习惯——项目一开始就用 pyenv 或者 conda 创建独立的虚拟环境。你想想看,如果你同时在做几个项目,一个要Python 3.8,另一个要3.11,全局装就乱套了。
下面是我常用的一套准备命令:
# 用pyenv安装Python 3.10(举例)
pyenv install 3.10.12
pyenv local 3.10.12
# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate
# 升级pip
pip install --upgrade pip
# 安装SDK依赖(后面会讲)
pip install -r requirements.txt
(.venv),看到它就表明你在隔离环境里了。我一看到这个括号,心里就踏实。
4.3 网络与权限预检
SDK接入过程中,你的机器需要访问云上的几个端点。说白了就是网络通不通的问题。我给你列一下必须开放的地址:
- API网关:
https://api.yunshuju.com/v3/(示例域名,实际按自己云厂商改) - 令牌服务:
https://iam.yunshuju.com/ - 敏感资产元数据:
https://datadiscover.yunshuju.com/metadata
我遇到过最头疼的事是什么?本地开发环境网络是通的,但公司内部有代理。SDK默认不走代理,然后就报连接超时。嗯,这里要注意——如果你在公司网络下,记得设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量。
权限方面,你需要一个服务账户(Service Account)的 AccessKey ID 和 Secret Access Key。权限策略至少要包含:
discover:ListDataSources— 列举数据源discover:ScanSensitiveData— 触发敏感数据扫描discover:GetScanResult— 获取扫描结果
4.4 快速预检脚本
等你装好环境,不妨跑一下这个预检脚本,看看所有条件是否就绪:
#!/usr/bin/env python3
"""环境预检脚本 — 云数据发现SDK接入预备检查"""
import sys
import subprocess
import ssl
import urllib.request
def check_python_version():
v = sys.version_info
if v.major == 3 and (3, 8) <= (v.minor,) <= (3, 11):
print(f"[✓] Python {v.major}.{v.minor}.{v.micro}")
else:
print(f"[✗] Python版本需3.8~3.11,当前为{v.major}.{v.minor}.{v.micro}")
sys.exit(1)
def check_network(endpoint):
try:
req = urllib.request.Request(endpoint, method='HEAD')
# 忽略证书验证(仅为预检,生产环境需认真对待)
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
urllib.request.urlopen(req, timeout=5, context=ctx)
print(f"[✓] 网络可达: {endpoint}")
except Exception as e:
print(f"[✗] 网络不通: {endpoint} — {e}")
def main():
print("===== 环境预检开始 =====")
check_python_version()
check_network("https://api.yunshuju.com/v3/")
check_network("https://iam.yunshuju.com/")
check_network("https://datadiscover.yunshuju.com/metadata")
print("===== 预检完成 =====")
if __name__ == "__main__":
main()
把这个脚本保存为 preflight.py,然后执行 python preflight.py。如果全部显示绿色对勾,那就说明环境准备好了。
1. 选对操作系统(Linux优先)
2. 用虚拟环境锁住Python版本
3. 检查网络和AccessKey权限
我个人习惯在开始每个新项目前,都跑一遍类似的预检脚本。这能省下后面排查问题的很多时间。你想想看,如果代码写了半天,最后发现是环境问题,那多憋屈啊?
这张图把环境准备的几个维度串起来了。你从中心节点“环境预检”出发,顺着箭头往下看,就知道要搞定操作系统、Python版本、网络与权限三个方向。最下面的预检脚本就是帮你一把梭的。