使用在IDEA的Python SDK中配置的Virtualenv环境

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

我有一个Java项目,我希望将其导出为jar。导致这个问题的原因是我从程序内部调用了一些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,因此在this tutorial之后创建了一个Virtualenv环境。在环境设置中添加了我需要的软件包,将my_script.py放在scripts目录中。结束了这样的结构:

/
├── 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而不是全局的包。

我非常感谢你的帮助或提示!

python intellij-idea virtualenv intellij-plugin virtual-environment
2个回答
0
投票

在我看来,venv不是你的最终解决方案:如果你需要在不同的主机(Windows,Linux,MACOS)上使用你的java代码,你应该为每台不同的机器重新编译一个venv,这不是你的情况。也许解决方案是“冻结”你的python代码。有很多关于Python中代码冻结的有趣文章,我首选的是python-guide

因此,在冻结代码之后,您可以像执行可执行文件一样从java启动python代码,并且可以根据操作系统提供不同的可执行文件。


0
投票

虚拟环境仍然需要安装Python,它只允许您选择要使用的已安装的python解释器,并允许您安装一组软件包。

如果你真的不想依赖Python安装,你可能可以使用Jython。它在JVM上运行Python代码。但是,它只支持Python 2.7。 Python 3支持是worked on,但很慢。

如果你有很多包依赖,那么这一切都不容易。

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