详细工作流程
get_packages_list.sh：
1. 初始化 CSV 文件

2. 获取系统中安装的包列表

3. 逐行处理每个包的信息
3.1 提取二进制包名和版本号
3.2 获取源码包信息
3.3 提取源码包名和版本号

4. 将所有信息写入 CSV 文件


update.py：
1. 读取.csv文件生成Excel文件并初始化结构
1.1 读取 packages_info.csv 文件，转换为 pandas DataFrame。
1.2 添加以下新列：包自研类型、总行数、有效代码行数、注释行数、空格行数、被依赖关系、被依赖关系图。
1.3 合并相同的源码包名的二进制包列表。
1.4 使用 diss_packages_file（包含待过滤的二进制包名）筛选数据，只保留指定的包。
1.5 输出：V11自研率数据表.xlsx。

2. 更新包的自研类型
2.1 读取数据库文件 V11包自研类型表.xlsx。
2.2 根据源码包名匹配 包自研类型。
2.3 更新输出 Excel 文件中的 包自研类型 列，为每个源码包标注“自研”或其他类型。

3. 下载源码包
3.1 创建源码下载目录 src_dir。
3.2 逐个下载每个源码包

4. 删除 .pc 目录
4.1 遍历源码目录，删除所有名为 .pc 的目录。

5. 删除自研包中的 3rdparty 文件夹
5.1 使用 find 命令查找 3rdparty 文件夹。
5.2 根据 Excel 文件中的 包自研类型 列，判断是否为“自研”包，删除对应自研包中的 3rdparty 目录。

6. 分析代码行数
6.1 遍历下载的源码目录。
6.2 使用 cloc 工具分析源码的代码行数、注释行数、空白行数。将统计结果填入 Excel 文件的对应列。


apt_rdepends.py：
1 使用 apt-rdepends 获取每个包的反向依赖列表。

2 对比反向依赖列表与指定的依赖包列表，记录公共依赖。

3 使用 dot 工具生成依赖关系图，并存储为 PNG 文件。

4 使用 openpyxl 将图像插入到对应的单元格。

