【问题标题】:Distribute a standalone Python software with Julia dependencies分发具有 Julia 依赖项的独立 Python 软件
【发布时间】:2021-08-23 23:33:43
【问题描述】:

我有一个主要用 Python 编写的软件,目前,我正在使用 PyInstaller 以用户友好的方式捆绑和分发该软件(它是我的 CI 管道的一部分,适用于 Linux 和 Windows) .

但是,我的表现很糟糕,我想在 Julia 中重写一些繁重的部分,同时将前端保留在 Python 中。我可以使用PyJulia 来执行此操作,但这意味着用户必须手动安装 Julia 才能使用我的程序。

Julia 确实有 PyInstaller 的等价物,即 PackageCompiler.jl,但我不知道如何从 Python 端调用使用 PackageCompiler.jl 编译的东西。

我怎样才能完成这项工作,以便我可以捆绑和分发包含 Python、Julia 及其运行所需的一切的可执行文件?


更多细节

我的最终用户是不知道编程是什么的人(化学家和药剂师)。他们没有 Python、Julia 或 Docker(他们甚至不想安装它)。

在我目前的方法中,与 PyInstaller 捆绑在一起的软件由一个可执行文件组成,其中包含所有内容(Python 及其所需的一切)。我真正想要的是保持相同的用户体验,同时 Julia 在后台运行。

我将在 Julia 端实现几个函数,并且我想要(几乎)与 PyJulia 相同的集成级别。

也许我会去 Rust 并只使用 C 接口,但我真的很想使用 Julia。

感谢大家的宝贵时间。

【问题讨论】:

  • Docker 会是你的选择吗? PackageCompiler 通常只有在 Julia 部分的启动时间对您来说是个问题时才需要,否则依赖 Pkg 安装 Julia 端会更容易。
  • @lungben 我不能依赖 Pkg,因为它不会存在于用户的机器上。出于同样的原因,Docker 也无济于事,因为理想情况下,我的最终用户不知道它是什么。

标签: python julia pyinstaller packagecompiler.jl


【解决方案1】:

在此处:https://julialang.github.io/PackageCompiler.jl/dev/apps/#Creating-an-app-1 您可以获得基本上是可执行文件的内容,然后您可以按照此帖子:Python Script execute commands in Terminal 执行您创建的文件。

【讨论】:

  • 是的,我知道这些解决方案,但在这种情况下,我只能拥有 julia_main() 入口点,这不太好。我正在寻找更像 PyJulia(但已编译)的东西。
  • @HélitonMartins 不是构建“应用程序”,而是构建一个"library",然后使用ctypes 直接从Python 调用它。但是您必须使用 Base.@ccallable 函数来包装 Julia 包函数。这可以通过元编程以编程方式完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 2013-01-17
  • 2020-01-15
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多