-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
经过大模型查找并修正后可以正常运行了,将错误现象和修复信息发在这里,供参考:
故障说明
在已正确安装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() 函数中:
- 错误代码位置: 第74行 version = importlib.metadata.version(package)
- 根本原因: 代码直接使用requirements.txt中包含版本要求的包名(如 litellm>=1.73)作为参数传递给 importlib.metadata.version() 函数
- 技术细节: 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:
- Error Location: Line 74 version = importlib.metadata.version(package)
- 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
- 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