按官方教程配置Pyre Check Pysa运行pyre analyze遇模块查找错误
问题解决步骤
1. 修正search_path配置
错误提示找不到标准库模块/内置函数,说明Pyre的搜索路径未正确包含标准库stubs或Python标准库目录。修改.pyre_configuration的search_path:
- 移除无效的相对路径(比如
../../../stubs/,若本地无此目录) - 添加Pyre自带的标准库stubs路径(虚拟环境下通常是
~/.venvs/pysa/lib/python3.10/site-packages/pyre_check/stubs,注意替换为你实际使用的Python版本号) - 添加系统Python标准库路径,比如Ubuntu 22.04对应
/usr/lib/python3.10/,Ubuntu 20.04对应/usr/lib/python3.8/
示例修正后的配置:
{ "source_directories": [ "." ], "taint_models_path": [ "." ], "search_path": [ "~/.venvs/pysa/lib/python3.10/site-packages/pyre_check/stubs", "/usr/lib/python3.10/", "~/.venvs/pysa/lib/python3.10/site-packages/" ], "exclude": [ ".*/integration_test/.*" ] }
2. 用pyre init自动生成配置(推荐)
手动配置路径容易出错,可通过Pyre自带命令生成适配当前环境的配置:
pyre init
初始化过程中会自动检测虚拟环境、Python版本并配置正确的搜索路径,之后再将taint_models_path添加到生成的.pyre_configuration中,确保指向你的sources_sinks.pysa所在目录。
3. 验证模型文件语法
确保sources_sinks.pysa中内置函数/模块的写法正确:
- 内置函数
eval的定义无需加模块前缀,示例:def eval(source: str) -> Any: ... Source[UserControlled] subprocess.getoutput的定义保持原写法即可:def subprocess.getoutput(command: str) -> str: ... Sink[CommandExecution]
关于教程可用性
官方的Pyre Check Pysa教程是可用的,你遇到的问题属于环境路径配置的适配问题,不同Ubuntu版本的Python版本、虚拟环境路径存在差异,调整路径后即可正常运行。
内容的提问来源于stack exchange,提问作者Florian T
相关产品推荐
相关产品推荐

