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