feat: 使用 graalpy-maven-plugin 自动安装 requests pip 包

- parser/pom.xml: 添加 packages 配置让 Maven 自动安装 requests 及其依赖
  - 移除手动 pip 安装依赖,改为 Maven 构建时自动安装
  - 添加注释说明 python-lsp-server 仍需 setup-graalpy-packages.sh

- README.md: 更新本地构建文档
  - Maven 现在自动安装 requests 核心包
  - setup-graalpy-packages.sh 变为可选(仅 Playground 代码提示需要)

- PyContextPool.java: 更新注释和错误消息
  - 说明 pip 包来源变化
  - 更新 requests 不可用时的提示信息
This commit is contained in:
q
2026-01-12 18:59:19 +08:00
parent ca2444db65
commit adff2bab89
3 changed files with 65 additions and 15 deletions

View File

@@ -152,16 +152,28 @@
<build>
<plugins>
<!-- GraalPy Maven Plugin - 创建 Python Home,不使用 pip 安装 -->
<!-- pip 包手动安装到 src/main/resources/graalpy-packages/,可打包进 jar -->
<!-- 安装方法: ./setup-graalpy-packages.sh -->
<!-- GraalPy Maven Plugin - 创建 Python Home 和 venv自动安装 pip -->
<!--
注意: python-lsp-server 依赖 ujson需编译 C 扩展GraalPy pip 无法安装。
如需 python-lsp-server 功能,请运行 setup-graalpy-packages.sh 使用系统 pip 安装。
此处只配置 requests 及其纯 Python 依赖Maven 构建时会自动安装到
target/classes/org.graalvm.python.vfs/venv/lib/python3.11/site-packages/
-->
<plugin>
<groupId>org.graalvm.python</groupId>
<artifactId>graalpy-maven-plugin</artifactId>
<version>${graalpy.version}</version>
<configuration>
<!-- 不声明 packages避免代理问题 -->
<!-- pip 包从 resources/graalpy-packages 加载 -->
<!-- pip 包列表 - 仅纯 Python 包 -->
<packages>
<!-- requests 及其依赖 - HTTP 客户端 (解析器核心功能必需) -->
<package>requests</package>
<package>urllib3</package>
<package>charset_normalizer</package>
<package>idna</package>
<package>certifi</package>
</packages>
</configuration>
<executions>
<execution>

View File

@@ -448,13 +448,13 @@ public class PyContextPool {
* 配置 Python 路径,确保能够加载 pip 包
* 使用路径缓存机制,避免重复检测文件系统
*
* pip 包安装在 src/main/resources/graalpy-packages/ 中,会打包进 jar。
* 运行时从 classpath 或文件系统加载。
* pip 包安装来源:
* 1. Maven 构建时 graalpy-maven-plugin 自动安装 requests 等核心包到
* target/classes/org.graalvm.python.vfs/venv/lib/python3.11/site-packages/
* 2. 可选:运行 parser/setup-graalpy-packages.sh 安装 python-lsp-serverPlayground 代码提示)
*
* 注意GraalPy 的 NativeModules 限制 - 只有进程中的第一个 Context 可以使用原生模块。
* 后续 Context 会回退到 LLVM 模式,这可能导致某些依赖原生模块的库无法正常工作。
*
* 安装方法:运行 parser/setup-graalpy-packages.sh
*/
private void setupPythonPath(Context context) {
try {
@@ -541,7 +541,7 @@ public class PyContextPool {
} else {
String error = bindings.getMember("_error_msg").asString();
log.warn("Python 环境配置: requests 不可用 ({}), sys.path长度: {}. " +
"请运行: ./setup-graalpy-packages.sh", error, pathLength);
"检查 Maven 构建是否正常完成 (graalpy-maven-plugin)", error, pathLength);
}
} catch (Exception e) {