From b5baaa38c328b38e753b54cc1f3632c2815445cb Mon Sep 17 00:00:00 2001 From: huangrh Date: Thu, 19 Mar 2026 14:36:51 +0800 Subject: [PATCH] Prefer venv Python and normalize venv extraction --- .../common/utils/ResourceExtractor.java | 25 +++++ .../ocr/engine/FlaskProcessManager.java | 105 ++++++++++++------ 2 files changed, 94 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/chinaweal/youfool/reportdetect/common/utils/ResourceExtractor.java b/src/main/java/com/chinaweal/youfool/reportdetect/common/utils/ResourceExtractor.java index 0b14894..f1d5b22 100644 --- a/src/main/java/com/chinaweal/youfool/reportdetect/common/utils/ResourceExtractor.java +++ b/src/main/java/com/chinaweal/youfool/reportdetect/common/utils/ResourceExtractor.java @@ -298,6 +298,7 @@ public class ResourceExtractor { Files.createDirectories(targetDir); copyDirectoryFromClasspath("python-runtime/venv-offline", targetDir); } + normalizeVenvDir(targetDir.getParent(), targetDir); makeExecutable(targetDir.resolve("bin/python3.10")); makeExecutable(targetDir.resolve("bin/python3")); log.info(" Done"); @@ -468,4 +469,28 @@ public class ResourceExtractor { } } } + + private void normalizeVenvDir(Path parentDir, Path expectedDir) throws IOException { + if (Files.isDirectory(expectedDir)) { + return; + } + Path altLinux = parentDir.resolve("venv-linux-offline"); + if (Files.isDirectory(altLinux)) { + log.info(" Renaming venv directory: {} -> {}", altLinux.getFileName(), expectedDir.getFileName()); + Files.move(altLinux, expectedDir, StandardCopyOption.REPLACE_EXISTING); + return; + } + Path altVenv = parentDir.resolve("venv"); + if (Files.isDirectory(altVenv)) { + log.info(" Renaming venv directory: {} -> {}", altVenv.getFileName(), expectedDir.getFileName()); + Files.move(altVenv, expectedDir, StandardCopyOption.REPLACE_EXISTING); + return; + } + Path altOff = parentDir.resolve("venv-offline"); + if (Files.isDirectory(altOff)) { + // already present under expected name in parent, but expectedDir path differs + return; + } + log.warn(" Venv directory not found after extraction under {}", parentDir); + } } diff --git a/src/main/java/com/chinaweal/youfool/reportdetect/modules/ocr/engine/FlaskProcessManager.java b/src/main/java/com/chinaweal/youfool/reportdetect/modules/ocr/engine/FlaskProcessManager.java index 7bd12e0..601e52b 100644 --- a/src/main/java/com/chinaweal/youfool/reportdetect/modules/ocr/engine/FlaskProcessManager.java +++ b/src/main/java/com/chinaweal/youfool/reportdetect/modules/ocr/engine/FlaskProcessManager.java @@ -153,10 +153,20 @@ public class FlaskProcessManager implements ApplicationListener stream = Files.newDirectoryStream(libRoot)) { @@ -415,10 +430,28 @@ public class FlaskProcessManager implements ApplicationListener