Python脚本封装成库:从临时工具到可复用组件的完整指南
你是否曾经写过一些实用的Python脚本解决了工作中的具体问题但每次都要复制粘贴代码到不同项目或者你的团队中有多个成员都在重复编写相似的功能从脚本到库的封装正是Python开发者从小工具使用者到工程化思维转变的关键一步。很多开发者停留在写脚本的阶段认为能用就行但真正高效的开发是把常用功能封装成可复用的库。这不仅关乎代码复用更关系到团队协作效率、版本管理和长期维护成本。本文将带你从实际项目角度完整走通Python脚本封装成库的全流程包括项目结构设计、setup.py配置、打包发布、版本管理等实用技巧。1. 为什么需要把脚本封装成库1.1 从临时脚本到可复用组件单个脚本文件适合一次性任务但当功能需要跨项目复用时问题就出现了版本不一致不同项目中使用不同版本的同一功能bug修复需要多处修改依赖管理混乱每个脚本文件都要单独管理导入语句和依赖测试困难脚本通常缺乏完整的测试覆盖协作障碍团队成员难以理解分散的脚本逻辑封装成库后你的代码变成了标准的Python包可以通过pip安装具有清晰的版本管理和依赖声明。1.2 实际场景的价值体现假设你开发了一个数据处理脚本团队中3个同事都在使用。某天发现了一个边界条件bug如果只是脚本形式你需要通知所有同事每个人手动替换文件重新测试各自项目而如果封装成库你只需要修复bug更新版本号发布新版本到内部PyPI同事通过pip install --upgrade your-library即可更新这种效率提升在长期项目中是巨大的。2. Python库封装的基础概念2.1 什么是Python包PackagePython包是一个包含__init__.py文件的目录该文件可以是空文件也可以包含初始化代码。包可以包含子包和模块形成层次化的命名空间。# 一个简单的包结构示例 my_package/ __init__.py module1.py module2.py subpackage/ __init__.py submodule1.py2.2 模块Module与脚本Script的区别模块被设计为通过import语句导入的可复用代码单元脚本设计为直接运行的一次性程序封装的关键在于将脚本的直接执行逻辑转换为模块的提供功能逻辑。2.3 打包工具生态现代Python打包主要依赖以下工具setuptools最主流的打包工具提供setup.py配置wheel构建二进制分发的格式twine用于将包上传到PyPIpip安装和管理包的工具3. 环境准备与工具安装3.1 Python环境要求确保你的Python版本在3.6以上这是当前主流库支持的最低版本。检查当前环境python --version pip --version3.2 安装必要的打包工具# 更新pip到最新版本 python -m pip install --upgrade pip # 安装打包所需工具 pip install setuptools wheel twine3.3 验证安装# 检查工具是否正常安装 python -c import setuptools; print(setuptools.__version__) python -c import wheel; print(wheel.__version__) python -c import twine; print(twine.__version__)4. 从脚本到库的完整重构流程4.1 原始脚本分析假设我们有一个数据处理脚本data_processor.py#!/usr/bin/env python3 # data_processor.py - 原始脚本版本 import csv import json from datetime import datetime def read_csv_file(file_path): 读取CSV文件并返回数据 data [] with open(file_path, r, encodingutf-8) as file: reader csv.DictReader(file) for row in reader: data.append(row) return data def filter_data(data, condition): 根据条件过滤数据 return [item for item in data if condition(item)] def save_to_json(data, output_path): 将数据保存为JSON格式 with open(output_path, w, encodingutf-8) as file: json.dump(data, file, indent2, ensure_asciiFalse) # 脚本的主执行逻辑 if __name__ __main__: # 硬编码的文件路径 input_file data.csv output_file foutput_{datetime.now().strftime(%Y%m%d_%H%M%S)}.json # 读取数据 data read_csv_file(input_file) # 过滤条件硬编码 filtered_data filter_data(data, lambda x: int(x[age]) 25) # 保存结果 save_to_json(filtered_data, output_file) print(f处理完成结果保存到: {output_file})4.2 识别可复用组件分析上述脚本我们可以识别出以下可复用部分核心功能函数read_csv_file,filter_data,save_to_json配置参数文件路径、过滤条件等应该参数化错误处理需要添加完善的异常处理日志记录替换print语句为标准日志4.3 重构为库结构创建标准的包目录结构data_processor/ ├── setup.py ├── README.md ├── LICENSE ├── data_processor/ │ ├── __init__.py │ ├── core.py │ ├── filters.py │ └── utils.py ├── tests/ │ ├── __init__.py │ ├── test_core.py │ └── test_filters.py └── examples/ ├── basic_usage.py └── advanced_usage.py5. 核心代码实现与模块划分5.1 核心模块设计data_processor/core.py- 主要功能实现 核心数据处理模块 import csv import json import logging from pathlib import Path from typing import List, Dict, Any, Callable logger logging.getLogger(__name__) class DataProcessor: 数据处理器的核心类 def __init__(self, config: Dict[str, Any] None): self.config config or {} self.logger logger def read_csv(self, file_path: str) - List[Dict[str, Any]]: 读取CSV文件 Args: file_path: CSV文件路径 Returns: 包含字典的列表每个字典代表一行数据 Raises: FileNotFoundError: 文件不存在时抛出 csv.Error: CSV格式错误时抛出 file_path Path(file_path) if not file_path.exists(): raise FileNotFoundError(f文件不存在: {file_path}) data [] try: with open(file_path, r, encodingutf-8) as file: reader csv.DictReader(file) for row_num, row in enumerate(reader, 1): data.append(row) self.logger.info(f成功读取 {len(data)} 行数据 from {file_path}) except csv.Error as e: self.logger.error(fCSV解析错误 at line {row_num}: {e}) raise except Exception as e: self.logger.error(f读取文件时发生错误: {e}) raise return data def filter_data(self, data: List[Dict], condition: Callable) - List[Dict]: 根据条件过滤数据 Args: data: 要过滤的数据列表 condition: 过滤条件函数返回True保留False过滤 Returns: 过滤后的数据列表 if not callable(condition): raise TypeError(condition必须是一个可调用对象) filtered [item for item in data if condition(item)] self.logger.info(f过滤后剩余 {len(filtered)} 条数据) return filtered def save_json(self, data: List[Dict], output_path: str, indent: int 2) - None: 保存数据为JSON格式 Args: data: 要保存的数据 output_path: 输出文件路径 indent: JSON缩进空格数 output_path Path(output_path) output_path.parent.mkdir(parentsTrue, exist_okTrue) try: with open(output_path, w, encodingutf-8) as file: json.dump(data, file, indentindent, ensure_asciiFalse) self.logger.info(f数据已保存到: {output_path}) except Exception as e: self.logger.error(f保存文件时发生错误: {e}) raise5.2 工具函数模块data_processor/utils.py- 辅助功能 工具函数模块 import logging from datetime import datetime from typing import List, Dict, Any def setup_logging(level: int logging.INFO) - None: 设置日志配置 logging.basicConfig( levellevel, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, datefmt%Y-%m-%d %H:%M:%S ) def validate_data(data: List[Dict], required_fields: List[str]) - bool: 验证数据是否包含必需字段 Args: data: 要验证的数据 required_fields: 必需字段列表 Returns: 验证是否通过 if not data: return False for i, item in enumerate(data): for field in required_fields: if field not in item: logging.warning(f第{i1}条数据缺少必需字段: {field}) return False return True def generate_output_filename(prefix: str output) - str: 生成带时间戳的输出文件名 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) return f{prefix}_{timestamp}.json5.3 包初始化文件data_processor/init.py- 定义包接口 数据处理器库 from .core import DataProcessor from .utils import setup_logging, validate_data, generate_output_filename __version__ 0.1.0 __author__ Your Name __email__ your.emailexample.com __all__ [ DataProcessor, setup_logging, validate_data, generate_output_filename ]6. 配置setup.py构建包6.1 基础setup.py配置创建setup.py文件from setuptools import setup, find_packages import os # 读取README文件内容 with open(README.md, r, encodingutf-8) as fh: long_description fh.read() # 读取requirements.txt with open(requirements.txt, r, encodingutf-8) as fh: requirements [line.strip() for line in fh if line.strip() and not line.startswith(#)] setup( namedata-processor, version0.1.0, authorYour Name, author_emailyour.emailexample.com, description一个强大的数据处理库支持CSV读取、过滤和JSON导出, long_descriptionlong_description, long_description_content_typetext/markdown, urlhttps://github.com/yourusername/data-processor, packagesfind_packages(), classifiers[ Development Status :: 3 - Alpha, Intended Audience :: Developers, License :: OSI Approved :: MIT License, Operating System :: OS Independent, Programming Language :: Python :: 3, Programming Language :: Python :: 3.6, Programming Language :: Python :: 3.7, Programming Language :: Python :: 3.8, Programming Language :: Python :: 3.9, Programming Language :: Python :: 3.10, ], python_requires3.6, install_requiresrequirements, extras_require{ dev: [ pytest6.0, pytest-cov, black, flake8, ], }, entry_points{ console_scripts: [ data-processordata_processor.cli:main, ], }, )6.2 依赖管理文件创建requirements.txt# 核心依赖 # 这里可以添加你的库依赖当前示例没有外部依赖创建requirements-dev.txt开发依赖pytest6.0 pytest-cov black flake8 mypy6.3 文档和许可文件README.md- 项目说明# Data Processor 一个强大的Python数据处理库提供CSV读取、数据过滤和JSON导出功能。 ## 功能特性 - 支持CSV文件读取 - 灵活的数据过滤 - JSON格式导出 - 完善的错误处理 - 数据验证功能 ## 安装 bash pip install>from data_processor import DataProcessor # 创建处理器实例 processor DataProcessor() # 读取CSV文件 data processor.read_csv(data.csv) # 过滤数据 filtered_data processor.filter_data(data, lambda x: int(x[age]) 25) # 保存结果 processor.save_json(filtered_data, output.json)文档详细使用说明请参考 文档 。许可证MIT License**LICENSE** - MIT许可证MIT LicenseCopyright (c) 2024 Your NamePermission is hereby granted...## 7. 测试代码实现 ### 7.1 单元测试编写 **tests/test_core.py** python import pytest import tempfile import os from data_processor.core import DataProcessor class TestDataProcessor: DataProcessor类的测试用例 def setup_method(self): 每个测试方法前的设置 self.processor DataProcessor() def test_read_csv_success(self): 测试成功读取CSV文件 # 创建临时CSV文件 with tempfile.NamedTemporaryFile(modew, suffix.csv, deleteFalse) as f: f.write(name,age,email\n) f.write(Alice,30,aliceexample.com\n) f.write(Bob,25,bobexample.com\n) temp_file f.name try: data self.processor.read_csv(temp_file) assert len(data) 2 assert data[0][name] Alice assert data[1][age] 25 finally: os.unlink(temp_file) def test_read_csv_file_not_found(self): 测试文件不存在的情况 with pytest.raises(FileNotFoundError): self.processor.read_csv(nonexistent.csv) def test_filter_data(self): 测试数据过滤功能 test_data [ {name: Alice, age: 30}, {name: Bob, age: 25}, {name: Charlie, age: 35} ] # 过滤年龄大于25的记录 filtered self.processor.filter_data(test_data, lambda x: int(x[age]) 25) assert len(filtered) 2 assert all(int(item[age]) 25 for item in filtered)7.2 运行测试# 安装开发依赖 pip install -r requirements-dev.txt # 运行测试 pytest # 运行测试并生成覆盖率报告 pytest --covdata_processor # 运行特定测试文件 pytest tests/test_core.py -v8. 构建和发布包8.1 本地构建包# 清理之前的构建文件 rm -rf build/ dist/ *.egg-info/ # 构建源码包和wheel包 python setup.py sdist bdist_wheel # 查看构建结果 ls -la dist/8.2 本地安装测试# 从本地构建安装 pip install dist/data_processor-0.1.0-py3-none-any.whl # 或者在开发模式下安装可编辑模式 pip install -e . # 测试安装是否成功 python -c import data_processor; print(data_processor.__version__)8.3 发布到PyPI# 上传到测试PyPI首次发布前建议先测试 python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/* # 上传到正式PyPI python -m twine upload dist/* # 如果需要输入账号密码建议使用API token # 在~/.pypirc中配置token9. 使用示例和最佳实践9.1 基础使用示例examples/basic_usage.py#!/usr/bin/env python3 基础使用示例 import logging from data_processor import DataProcessor, setup_logging def main(): # 设置日志 setup_logging(logging.INFO) # 创建处理器实例 processor DataProcessor() try: # 读取数据 data processor.read_csv(examples/sample_data.csv) print(f读取到 {len(data)} 条数据) # 过滤数据年龄大于25岁 filtered_data processor.filter_data( data, lambda x: int(x.get(age, 0)) 25 ) print(f过滤后剩余 {len(filtered_data)} 条数据) # 保存结果 processor.save_json(filtered_data, output/filtered_data.json) print(处理完成) except Exception as e: logging.error(f处理过程中发生错误: {e}) if __name__ __main__: main()9.2 高级使用示例examples/advanced_usage.py#!/usr/bin/env python3 高级使用示例 - 自定义配置和批量处理 import logging from pathlib import Path from data_processor import DataProcessor, setup_logging class AdvancedDataProcessor: 高级数据处理器支持批量操作 def __init__(self, config): self.processor DataProcessor(config) self.logger logging.getLogger(__name__) def batch_process(self, input_dir, output_dir, conditions): 批量处理目录下的所有CSV文件 input_path Path(input_dir) output_path Path(output_dir) output_path.mkdir(parentsTrue, exist_okTrue) csv_files list(input_path.glob(*.csv)) self.logger.info(f找到 {len(csv_files)} 个CSV文件) results {} for csv_file in csv_files: try: # 读取数据 data self.processor.read_csv(str(csv_file)) # 应用所有过滤条件 for condition_name, condition_func in conditions.items(): filtered self.processor.filter_data(data, condition_func) # 保存结果 output_file output_path / f{csv_file.stem}_{condition_name}.json self.processor.save_json(filtered, str(output_file)) results[f{csv_file.name}_{condition_name}] len(filtered) except Exception as e: self.logger.error(f处理文件 {csv_file} 时出错: {e}) continue return results def main(): setup_logging(logging.INFO) # 定义多个过滤条件 conditions { adults: lambda x: int(x.get(age, 0)) 18, seniors: lambda x: int(x.get(age, 0)) 60, high_income: lambda x: float(x.get(income, 0)) 50000 } advanced_processor AdvancedDataProcessor({strict_mode: True}) results advanced_processor.batch_process( input_direxamples/batch_input, output_direxamples/batch_output, conditionsconditions ) print(批量处理完成) for file_condition, count in results.items(): print(f{file_condition}: {count} 条记录) if __name__ __main__: main()10. 常见问题与解决方案10.1 打包和安装问题问题现象可能原因解决方案ModuleNotFoundError包结构不正确或__init__.py缺失检查目录结构和初始化文件安装后无法导入包名冲突或安装路径问题使用虚拟环境检查包名唯一性setup.py执行错误Python版本不兼容或语法错误检查Python版本要求验证语法10.2 版本管理策略# 在__init__.py中定义版本 __version__ 1.2.3 # 主版本.次版本.修订版本 # 版本号规则 # 主版本不兼容的API修改 # 次版本向下兼容的功能性新增 # 修订版本向下兼容的问题修正10.3 依赖管理最佳实践精确版本约束避免使用过于宽松的版本约束分离开发依赖测试、代码检查工具放在extras_require中定期更新依赖使用工具检查安全更新11. 工程化建议与进阶技巧11.1 持续集成配置创建**.github/workflows/test.yml**name: Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: [3.7, 3.8, 3.9, 3.10] steps: - uses: actions/checkoutv2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-pythonv2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install -e .[dev] - name: Run tests run: | pytest --covdata_processor --cov-reportxml - name: Upload coverage uses: codecov/codecov-actionv211.2 代码质量工具pyproject.toml现代配置方式[build-system] requires [setuptools45, wheel] build-backend setuptools.build_meta [tool.black] line-length 88 target-version [py37] [tool.flake8] max-line-length 88 extend-ignore [E203] [tool.mypy] python_version 3.7 warn_return_any true warn_unused_configs true11.3 文档生成配置使用Sphinx生成专业文档# 安装Sphinx pip install sphinx sphinx-rtd-theme # 初始化文档项目 sphinx-quickstart docs # 生成API文档 sphinx-apidoc -o docs/source data_processor将脚本封装成库不是一次性的工作而是一个持续改进的过程。从第一个版本开始建立良好的工程习惯包括版本控制、自动化测试、持续集成和文档维护。随着项目的发展这些实践会为你节省大量时间和精力。建议从小的功能模块开始实践逐步积累经验。每次封装过程都是对代码设计能力的提升最终你会发现自己能够设计出更加优雅、可维护的软件架构。

相关新闻

PyTorch模型保存与加载实战:从state_dict到检查点部署全解析

PyTorch模型保存与加载实战:从state_dict到检查点部署全解析

1. 为什么“保存与加载”是PyTorch实战的生死线在PyTorch的日常开发中,我们常常沉迷于模型架构的精妙设计、损失函数的反复调优,或是数据增强的奇技淫巧。然而,一个看似基础却至关重要的环节——模型的保存与加载——却往往被新手甚至一些有经…

2026/8/1 10:38:51 阅读更多 →
0.71英寸LCD驱动全攻略:从SPI接口到低功耗显示的嵌入式实践

0.71英寸LCD驱动全攻略:从SPI接口到低功耗显示的嵌入式实践

1. 项目缘起:为什么是0.71英寸LCD?最近在做一个需要超小尺寸显示界面的嵌入式项目,找了一圈市面上的显示屏,要么太大,要么功耗太高,要么接口复杂。最后,一块0.71英寸的LCD模块进入了我的视线。你…

2026/8/1 10:38:51 阅读更多 →
高效获取网盘真实下载地址:九大主流网盘直链下载助手使用指南

高效获取网盘真实下载地址:九大主流网盘直链下载助手使用指南

高效获取网盘真实下载地址:九大主流网盘直链下载助手使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…

2026/8/1 10:37:50 阅读更多 →

最新新闻

互联网行业薪资结构解析与认知误区

互联网行业薪资结构解析与认知误区

1. 互联网行业薪资认知误区解析 "年薪60万,月入5万"——这个数字在互联网行业被广泛讨论,但实际情况往往与大众认知存在显著差异。作为在互联网人力资源领域工作多年的从业者,我经常遇到年轻求职者对薪资结构存在严重误解的情况。 …

2026/8/1 11:32:05 阅读更多 →
苹果设备激活锁终极指南:免费解锁iOS 15-16系统

苹果设备激活锁终极指南:免费解锁iOS 15-16系统

苹果设备激活锁终极指南:免费解锁iOS 15-16系统 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否因为忘记Apple ID密码而无法使用自己的iPhone?或者购买的二手苹果设备被前…

2026/8/1 11:32:05 阅读更多 →
Oracle DBA 应该掌握的 100 条命令(建议收藏)

Oracle DBA 应该掌握的 100 条命令(建议收藏)

前言 Oracle DBA 的日常工作并不是简单地执行几条 SQL。数据库启动失败、会话阻塞、表空间告警、UNDO 异常、SQL 性能下降、归档堆积、备份失效、Data Guard 延迟,这些问题最终都需要通过命令和动态性能视图定位。 本文整理了 Oracle DBA 工作中使用频率较高的 100 …

2026/8/1 11:32:05 阅读更多 →
蚂蚁InTech奖最后7天冲刺指南:技术评审逻辑与高效申报策略

蚂蚁InTech奖最后7天冲刺指南:技术评审逻辑与高效申报策略

1. 项目概述:一场不容错过的技术盛宴如果你是一位在人工智能、数据科学、区块链或金融科技领域深耕的技术人,最近一定被“蚂蚁InTech奖”刷屏了。这个由蚂蚁集团发起的奖项,已经走到了第三届,而今年的申报窗口,只剩下最…

2026/8/1 11:32:05 阅读更多 →
5分钟掌握OneMore:让OneNote文档排版效率提升300%的终极指南

5分钟掌握OneMore:让OneNote文档排版效率提升300%的终极指南

5分钟掌握OneMore:让OneNote文档排版效率提升300%的终极指南 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 还在为OneNote文档排版而烦恼吗?手…

2026/8/1 11:32:05 阅读更多 →
CMAKE备忘录

CMAKE备忘录

目录 CMake 是什么? 1.set() 2.file() 用于 文件和目录操作 1. 查找文件(最常用) 查找 .cpp 文件 递归查找 2. 读取文件 3. 写文件 4. 复制文件 5. 创建目录 6. 删除文件 7. 获取绝对路径 常用场景 自动添加源码 复制配置文件…

2026/8/1 11:31:05 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →