Skip to content

运行 rdagent collect_info 时报告 找不到 litellm>=1.73的错误 #1311

@reddishz

Description

@reddishz

经过大模型查找并修正后可以正常运行了,将错误现象和修复信息发在这里,供参考:

故障说明

在已正确安装rdagent及其依赖包的conda环境中,执行 rdagent collect_info 命令时出现 PackageNotFoundError: No package metadata was found for litellm>=1.73 错误,导致命令执行失败。

环境信息

• 操作系统: Linux
• Python版本: 3.13.9
• rdagent版本: 0.8.0
• litellm版本: 1.80.7 (已正确安装且满足>=1.73要求)

原因定位

问题出现在 /rdagent/app/utils/info.py 文件的 rdagent_info() 函数中:

  1. 错误代码位置: 第74行 version = importlib.metadata.version(package)
  2. 根本原因: 代码直接使用requirements.txt中包含版本要求的包名(如 litellm>=1.73)作为参数传递给 importlib.metadata.version() 函数
  3. 技术细节: importlib.metadata.version() 函数只接受纯包名(如 litellm),不能处理包含版本约束符号(>=, ==, < 等)的字符串

修复方案

在第70-75行之间添加包名解析逻辑:

python

修复前的问题代码

for package in package_list:
if package == "typer[all]":
package = "typer"
version = importlib.metadata.version(package) # 这里会失败
package_version_list.append(f"{package}=={version}")

修复后的代码

for package in package_list:
if package == "typer[all]":
package = "typer"
# 从版本要求中提取纯包名
import re
package_name = re.split(r'[<>=!]', package)[0].strip()
try:
version = importlib.metadata.version(package_name)
package_version_list.append(f"{package_name}=={version}")
except importlib.metadata.PackageNotFoundError:
logger.warning(f"Package {package_name} not found in current environment")
continue

修改备注

• 添加正则表达式解析,从版本约束字符串中提取纯包名
• 增加异常处理,避免因个别包缺失导致整个命令失败
• 保持向后兼容性,不影响现有功能


English Bug Report

Issue Description

When executing rdagent collect_info command in a conda environment with rdagent and its dependencies properly installed, the command fails with
PackageNotFoundError: No package metadata was found for litellm>=1.73 error.

Environment Information

• OS: Linux
• Python Version: 3.13.9
• rdagent Version: 0.8.0
• litellm Version: 1.80.7 (properly installed and meets >=1.73 requirement)

Root Cause Analysis

The issue occurs in the rdagent_info() function within /rdagent/app/utils/info.py:

  1. Error Location: Line 74 version = importlib.metadata.version(package)
  2. Root Cause: The code directly passes package names with version constraints (e.g., litellm>=1.73) from requirements.txt to the importlib.metadata.version() function
  3. Technical Details: importlib.metadata.version() only accepts pure package names (e.g., litellm) and cannot handle strings containing version constraint operators (>=, ==, <, etc.)

Fix Implementation

Add package name parsing logic between lines 70-75:

python

Problematic code before fix

for package in package_list:
if package == "typer[all]":
package = "typer"
version = importlib.metadata.version(package) # This fails
package_version_list.append(f"{package}=={version}")

Fixed code

for package in package_list:
if package == "typer[all]":
package = "typer"
# Extract pure package name from version requirements
import re
package_name = re.split(r'[<>=!]', package)[0].strip()
try:
version = importlib.metadata.version(package_name)
package_version_list.append(f"{package_name}=={version}")
except importlib.metadata.PackageNotFoundError:
logger.warning(f"Package {package_name} not found in current environment")
continue

Modification Notes

• Added regex parsing to extract pure package names from version constraint strings
• Implemented exception handling to prevent command failure due to missing individual packages
• Maintains backward compatibility without affecting existing functionality

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions