繁体   English   中英

使用 ProcessBuilder 从 Java 执行二进制文件时,在 Ubuntu 中使用较旧的 python 版本

[英]Use an older python version in Ubuntu when executing a binary from Java using ProcessBuilder

我有一个 Java SpringBoot 应用程序,它可以进行音频处理并构建到基于 Ubuntu 的 docker 容器。该应用程序使用第三方二进制工具 ( https://github.com/shaka-project/shaka-packager ),例如

ProcessBuilder pb = new ProcessBuilder();
pb.command("shaka-packager", "-input foo", "-output bar");
pb.start().waitFor();

问题:我们开始更新 Java 等版本,并使用更新版本的 Ubuntu 22.04,它随 Python 3.10 一起提供。 这破坏了 shaka-packager,因为它有一些 python 组件执行from collections import Mapping ,它已被弃用并移至collections.abc

我想弄清楚是否有一种方法可以在虚拟 3.9 python 环境中运行 shaka 打包程序。 我用 conda 搞砸了一点,但似乎无法让它与 Java 的ProcessBuilder调用一起工作。 conda activate在交互式 shell 中工作,但ProcessBuilder为每次调用创建一个新的 shell。 我以为conda run会这样做,但它似乎只适用于 python 脚本而不是编译的二进制文件。

关于如何处理这个问题的任何建议? 我可以分叉 shaka packager 并修复失败的 python 脚本(并提交 PR),但如果所有者不合并它,我宁愿不长期维护我们自己的分叉。 我也很想放弃二进制文件,改用 Java 库,但是还没有找到一个可以完成 shaka 可以做的所有事情的库,而且我认为我没有时间尝试混合使用不同的库来获得完整的功能平价。

我建议您从 PPA 安装 Python3.9:

$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt install python3.9

现在你可以使用python3.9

$ python3.9 --version
$ python3.9 -m pip install -r requirements.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM