通过 Java ProcessBuilder 创建的虚拟环境无法正确安装依赖项,而 PyCharm 生成的虚拟环境可以正常工作

问题描述 投票:0回答:1

我遇到了一个问题,我在 Windows 上使用 Java 的 ProcessBuilder 创建 Python 虚拟环境,但是以这种方式创建的环境(也从以相同方式结束的终端尝试过)无法安装 same 依赖项当我使用 相同的基本 Python 可执行文件从 PyCharm 创建虚拟环境时,工作得很好。详细内容如下:

我使用相同的 Python 可执行文件(已验证)通过 PyCharm 和 Java 代码中的 ProcessBuilder 创建环境。 在 PyCharm 中创建的虚拟环境运行良好,我可以毫无问题地安装所有必要的依赖项。 然而,在我的 Java 代码中通过 ProcessBuilder 创建的虚拟环境无法安装相同的依赖项,并且在尝试安装它们时出现错误,特别是在权限和包冲突方面。 核心问题是,使用 ProcessBuilder 创建的虚拟环境似乎存在依赖项安装问题,即使它基于与 PyCharm 中创建的相同的 Python 可执行文件。

冲突的原因是: mediapipe 0.10.0 取决于 protobuf<4 and >=3.11 Tensorboard 2.10.1 依赖于 protobuf<3.20 and >=3.9.2

这些依赖项位于 pycharm 中创建的 venv 中,并且 它可以工作。 我在 pycharm 中创建了多个 venv 试图让它失败,这样我就可以看到问题出在哪里,除了明显的依赖问题之外,它们都有效。 把protobuf的-v改成满足依赖问题的,代码就不行了哈哈。

有人在通过 Java 的 ProcessBuilder/终端管理虚拟环境时经历过这种不一致吗?这可能与权限问题有关,还是 PyCharm 和 Java 处理环境创建的方式可能有所不同?

private void crearYActivarAmbienteVirtual() {
    try {
        // Command to create the virtual environment
        String[] createCommand = {
                "C:\\Python310\\python.exe",
                "-m",
                "venv",
                "C:\\venv"
        };
        runProcess(
                createCommand,
                "Ambiente Virtual",
                "El ambiente virtual se ha creado correctamente.",
                "Error al crear el ambiente virtual."
        );

        // Directly invoke pip from the virtual environment
        String pipPath = "C:\\venv\\Scripts\\pip.exe"; // Adjust for Windows paths
        String[] installCommand = {
                pipPath,
                "install",
                "-r",
                "src/main/resources/PythonScript/requirements.txt"
        };

        runProcess(
                installCommand,
                "Requerimientos",
                "Los requerimientos se han instalado correctamente.",
                "Error al instalar los requerimientos."
        );
    } catch (IOException | InterruptedException e) {
        Platform.runLater(() -> queueNotification("Error", "Error al configurar el ambiente virtual.", true));
    }
}

private void runProcess(String[] command, String title, String successMsg, String errorMsg) throws IOException, InterruptedException {
    Process process = new ProcessBuilder(command).start();
    process.waitFor();

    if (process.exitValue() == 0) {
        Platform.runLater(() -> queueNotification(title, successMsg, false));
    } else {
        Platform.runLater(() -> queueNotification("Error", errorMsg, true));
    }
}

对于错误,我只是在终端中执行相同的操作,看看抛出了什么

错误:无法安装 -r src/main/resources/PythonScript/requirements.txt (第 46 行)、-r src/main/resources/PythonScript/requirements.txt (第 78 行)和 protobuf==3.20.3 因为这些包版本具有冲突的依赖关系。

冲突的原因是: mediapipe 0.10.0 取决于 protobuf<4 and >=3.11 Tensorboard 2.10.1 依赖于 protobuf<3.20 and >=3.9.2

python java pycharm python-venv
1个回答
0
投票

简化您的脚本,如下所示。

@echo off
chcp 65001

python -m venv test
call test\Scripts\activate

pip install -r requirements.txt

python xxxx.py


© www.soinside.com 2019 - 2024. All rights reserved.