我有一个希望导出为 jar 的 Java 项目。导致我出现问题的原因是我从程序内部调用了一些 Python 脚本,而这些脚本需要安装一些 Python 包。我对 python 脚本的调用如下所示:
root = Paths.get(".").toAbsolutePath().normalize().toString();
cmd = "python " + root + "/my_script.py"
Runtime.getRuntime().exec(cmd)
当我运行 jar 时,只要我有 Python 脚本,并且所有 Python 包(加上 Python 本身)都安装在我的计算机上(全局),它就可以正常工作。
不过,我想做的是将所有这些 Python 东西捆绑到我的 jar 中——这样我就可以在任何机器上运行该应用程序(唯一的要求是 Java 8——没有 Python 或其任何包)。我发现virtualenv正是在这里可以完成的工作。
当我在 IDEA 工作时,我决定以 SDK 方式配置 virtualenv,因此按照本教程创建了一个 Virtualenv 环境。在环境的设置中添加了我需要的包,将 my_script.py 放在脚本目录中。最终得到这样的结构:
/
├── src
│ └── main.java
│ └── sample.fxml
└── venv
├── include
│
├── scripts [a bunch of default scripts here + my_script.py]
└── lib
└── site-packages [a bunch of libraries here including the ones I require]
└── tcl8.6
我应该说 Jetbrain 的教程真的需要继续,因为我完全迷失了这里。我只是不知道如何引用 my_script.py 以便它使用来自 venv 的包而不是全局包。
非常感谢您的帮助或提示!