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开发,体验不错。

操作系统推荐版本我的建议
Ubuntu18.04 / 20.04 / 22.04首选,软件源全
CentOS / RHEL7.9+ / 8+生产环境最常见
macOSCatalina (10.15)+开发友好,推荐
Windows10 / 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 — 获取扫描结果
⚠️ 重点提醒: 千万别把 AccessKey 硬编码在代码里。我在早期项目里干过这事,结果代码不小心上传到GitHub,几分钟后账户就被异地登录了。你应该用环境变量或者云厂商的密钥管理服务来保存。

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权限

我个人习惯在开始每个新项目前,都跑一遍类似的预检脚本。这能省下后面排查问题的很多时间。你想想看,如果代码写了半天,最后发现是环境问题,那多憋屈啊?

环境准备知识体系 环境预检 操作系统 Linux / macOS / WSL2 Python版本 3.8 ~ 3.11 + 虚拟环境 网络与权限 域名可达 / AccessKey 快速预检脚本 preflight.py 一键检查 Python / 网络 / 权限,省去手动排查

这张图把环境准备的几个维度串起来了。你从中心节点“环境预检”出发,顺着箭头往下看,就知道要搞定操作系统、Python版本、网络与权限三个方向。最下面的预检脚本就是帮你一把梭的。