1. Ubuntu 下 pyparted 与 dmidecode 安装踩坑实录
如果你在 Ubuntu 上做磁盘管理、硬件信息采集或者写自动化运维脚本,大概率会碰到pyparted和dmidecode这两个名字。pyparted是 GNU Parted 的 Python 绑定,能让你用 Python 代码直接操作分区表、创建删除分区、读取磁盘几何信息;dmidecode则是读取 SMBIOS/DMI 表的标准工具,能拿到主板型号、内存插槽、BIOS 版本、序列号这类底层硬件信息。两者一个管存储、一个管硬件清单,经常被放在同一套环境初始化脚本里。
问题在于,这两个包的安装路径特别容易让人迷惑。pyparted在 PyPI 上有同名包,dmidecode在 PyPI 上也有一个同名包,很多人第一反应就是pip install pyparted、pip install dmidecode,装完 import 一看,报错说找不到libparted,或者dmidecode模块里根本没有dmidecodeXML()这个方法。我试过在干净的 Ubuntu 22.04 上复现,pip 装完确实能 import,但一调用核心功能就崩,因为 pip 那个包只是个薄封装,真正的底层库和命令行工具它不会帮你装。
这篇就按「先讲清楚什么时候用 apt-get、什么时候用 pip」这个主线,把 pyparted 和 dmidecode 的安装、依赖检查、模块导入验证、硬件信息读取完整跑一遍。最后再演示一个实际场景:把脚本里的 API endpoint 切到 TaoToken 之后,怎么做连通性验证,确保你的环境搭建和网络调用都是一次通过的。适合刚接触 Ubuntu 系统编程、或者被这两个包坑过的朋友。
2. TaoToken 前置准备:API Key 与 Base URL 怎么拿
在讲安装之前,先把后面验证环节要用到的 TaoToken 配置说清楚,免得你装完包发现网络调用那步卡住。TaoToken 是一个兼容 OpenAI 接口规范的模型服务入口,你可以把它理解成「把请求发到一个统一的 Base URL,用一把 API Key 就能调用多种模型」。对于写运维脚本、做自动化 agent 的场景,它省掉了你自己维护多套 endpoint 的麻烦。
你需要准备两样东西:API Key 和 Base URL。API Key 在控制台的 API Keys 页面创建,地址是https://taotoken.net/api-keys,登录后点创建,复制那串sk-开头的字符串,存到环境变量里,别硬编码进脚本。Base URL 是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 OpenAI SDK 的base_url使用。
我建议用环境变量的方式管理,这样脚本可以跨机器复用:
export TAOTOKEN_API_KEY="sk-你的key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"如果你用的是 Claude Code 这类工具,配置方式略有不同,需要在 settings 里指定 Base URL 和 Key,模型 ID 也要写全。后面第 3 节我会给出可复制的 JSON 配置片段。这里先记住一个原则:Base URL、API Key、Model ID 这三件套必须同时正确,缺一个就会报 401 或者 model not found。
另外提醒一句,TaoToken 的模型对话入口在https://taotoken.net/models,你可以先在网页上确认你要用的模型 ID 拼写,再写进配置。很多人 401 排查半天,最后发现是模型名写错了。控制台地址是https://taotoken.net/console,API Keys 管理在https://taotoken.net/api-keys,文档在https://taotoken.net/doc,这几个链接建议收藏。
3. 可复制配置:apt-get 与 pip 的取舍及完整命令
这一节是核心,直接给命令和判断逻辑。先说结论:pyparted 用 apt-get 装,dmidecode 也用 apt-get 装,pip 只用来装那些纯 Python、不依赖系统库的辅助包。为什么?因为 pyparted 依赖libparted这个 C 库,pip 上的 pyparted 包在编译或运行时需要系统里已经有 libparted 和对应的开发头文件,而 apt 的python3-parted包会自动把libparted2、python3-parted这些依赖一起拉齐。dmidecode 更直接,它本质是个命令行工具,pip 上那个同名包只是解析 dmidecode 输出的封装,你不装系统级的dmidecode命令,它就没有数据源可读。
先更新索引并安装系统依赖:
sudo apt-get update sudo apt-get install -y python3-parted dmidecode parted libparted-dev这里python3-parted就是 pyparted 的 apt 包名,注意不是pyparted。parted是命令行工具,libparted-dev是开发头文件,如果你后续要用 pip 装某些需要编译的包,这个头文件能省掉一堆fatal error: parted.h: No such file的报错。dmidecode直接装系统包,装完which dmidecode应该能看到/usr/sbin/dmidecode。
装完验证一下:
python3 -c "import parted; print(parted.__version__ if hasattr(parted,'__version__') else 'parted ok')" dmidecode --version如果import parted没报错,说明 apt 路径走通了。这时候不要再去pip install pyparted,否则 pip 的包可能覆盖掉 apt 装的版本,导致 import 到错误的模块。如果你之前已经 pip 装过,先卸掉:
pip uninstall -y pyparted dmidecode然后重新用 apt 装一遍。对于 dmidecode,pip 那个包卸载后,系统命令还在,你的脚本改成subprocess调用dmidecode命令,或者用python3-dmidecode这类 apt 包(部分 Ubuntu 版本提供),比 pip 那个残缺封装靠谱得多。
接下来是 TaoToken 的配置片段。如果你用 OpenAI 兼容的 SDK,配置写成这样:
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的key", "model": "claude-3-5-sonnet-20241022" }如果你用 Claude Code,settings 里对应的是:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的key", "ANTHROPIC_MODEL": "claude-3-5-sonnet-20241022" } }注意 Claude Code 用的是ANTHROPIC_BASE_URL这个变量名,别写成OPENAI_BASE_URL,否则它会去连默认地址。Model ID 一定要写全,claude-3-5-sonnet-20241022这种带日期的完整 ID 最稳。Cline 或者 MCP 类的工具,配置里同样要填 Base URL、Key、Model ID 三件套,缺一不可。
4. 验证请求:模块导入与硬件信息读取实测
装完之后,写一个完整的验证脚本,把 pyparted 的分区读取、dmidecode 的硬件信息读取、以及 TaoToken 的连通性一次性跑通。先看 pyparted 部分:
import parted device = parted.getDevice("/dev/sda") print("磁盘型号:", device.model) print("容量(字节):", device.length * device.sectorSize) disk = parted.newDisk(device) print("分区表类型:", disk.type) for p in disk.partitions: print("分区:", p.path, p.geometry.start, p.geometry.end)这段代码在 apt 装的 pyparted 下能正常跑,getDevice会调用底层 libparted。如果你之前 pip 装的那个包,这里大概率报AttributeError或者libparted not found。跑通后你会看到磁盘型号和分区列表,说明 pyparted 环境没问题。
dmidecode 部分,直接用 subprocess 调用系统命令最稳:
import subprocess out = subprocess.check_output(["sudo", "dmidecode", "-t", "1"], text=True) print(out)-t 1是读取系统信息类型,输出里能看到制造商、产品名称、序列号。如果你要解析成结构化数据,可以按行 split,或者用dmidecode -t memory看内存插槽。注意 dmidecode 需要 root 权限,脚本里加sudo或者用pkexec。之前 pip 那个dmidecodeXML()方法之所以报错,就是因为 pip 包没有正确绑定系统命令,换成 subprocess 调用就绕开了这个坑。
最后是 TaoToken 连通性验证。用 curl 发一个最小请求:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-3-5-sonnet-20241022", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 10 }'如果返回里有choices字段,说明 Base URL、Key、Model ID 三件套都对了。如果返回 401,检查 Key 有没有复制全;如果返回 model not found,去https://taotoken.net/models核对模型 ID;如果连接超时,检查你的网络能不能访问taotoken.net。这一步跑通,你的环境搭建和网络调用就都验证完了。
5. 本篇常见错排查:401、libparted、choices 报错对照
这一节把最容易撞上的几个报错列出来,对照着改。
报错一:ImportError: libparted.so.2: cannot open shared object file。这是 pip 装 pyparted 的典型症状,pip 包编译时链接了 libparted,但运行时找不到库。解决:pip uninstall pyparted,然后sudo apt-get install python3-parted libparted-dev。装完ldconfig -p | grep parted确认库在。
报错二:AttributeError: module 'dmidecode' has no attribute 'dmidecodeXML'。pip 的 dmidecode 包没有这个方法,它只是个解析器。解决:pip uninstall dmidecode,改用subprocess调用系统dmidecode命令,或者装python3-dmidecode(如果源里有)。
报错三:TaoToken 返回 401 Unauthorized。检查三处:API Key 是不是sk-开头且没多余空格;请求头是不是Authorization: Bearer sk-xxx;Base URL 是不是https://taotoken.net/api而不是带/v1的完整路径(SDK 会自动拼/v1/chat/completions)。如果手动 curl,路径要写全https://taotoken.net/api/v1/chat/completions。
报错四:local proxy failed或连接被拒。这类通常是本地代理配置干扰,检查http_proxy、https_proxy环境变量有没有指向一个不可用的地址,unset掉再试。TaoToken 的地址是直连的,不需要额外代理设置。
报错五:返回体里reading choices失败或者choices为空。先确认模型 ID 拼写,claude-3-5-sonnet-20241022这种带日期的完整 ID 最稳;再确认max_tokens没设成 0;最后看返回的error字段,里面通常有具体原因。
报错六:OAuth 相关报错。如果你用 Claude Code 且看到 OAuth 字样,说明它还在走默认的登录流程,没读到你的ANTHROPIC_BASE_URL。检查 settings 文件路径对不对,环境变量有没有 export 到当前 shell,重启终端再试。
排查顺序建议:先确认 apt 包装没装(dpkg -l | grep parted),再确认 import 路径(python3 -c "import parted; print(parted.__file__)"),最后确认网络三件套。大部分问题都出在 pip 和 apt 混用上,记住 pyparted 和 dmidecode 都走 apt 就对了。
6. 环境跑通后的下一步:把验证脚本接进你的工作流
环境搭好、连通性验证通过之后,你可以把这个验证脚本固化成一个check_env.py,每次换机器或者部署新环境时先跑一遍。脚本里把 pyparted 的磁盘读取、dmidecode 的硬件信息、TaoToken 的 ping 请求串起来,任何一环失败就打印具体错误。这样比手动一条条敲命令快得多。
如果你后续要做长期的编码任务或者 agent 自动化,建议把 TaoToken 的 Coding Plan 用起来,入口在https://taotoken.net/coding-plan,它针对代码生成和长上下文场景做了优化,配合 Claude Code 或者 Cline 这类工具,能省掉不少 token 成本。接入文档在https://taotoken.net/doc,里面有各语言 SDK 的完整示例,遇到配置问题先翻文档,比搜索引擎快。
最后留一个实用技巧:把TAOTOKEN_API_KEY和TAOTOKEN_BASE_URL写进~/.bashrc或者用direnv管理,别写死在脚本里。这样你换 key 或者换环境的时候只改一处,所有脚本自动生效。pyparted 和 dmidecode 的 apt 包也建议写进你的setup.sh,新机器一条命令装齐,省得每次重新踩坑。