【问题标题】:How to use together!? Python, Lua, and Ruby? [closed]怎么一起用​​!? Python、Lua 和 Ruby? [关闭]
【发布时间】:2013-11-19 21:34:48
【问题描述】:

我不久前开始编程。我使用了一点 Python、Lua 和 Ruby。是否可以使用 py2exe、py2app 或 py2deb 将所有三个脚本编译成一个可执行文件?

如果没有,我应该使用哪一个来进行游戏开发,如果有人有任何类型的资源可以学习,我真的很介意学习更多。

【问题讨论】:

  • 许多游戏实际上是通过用 C(或 C++ 或 ObjC 或其他)编写主程序并嵌入解释器来运行脚本来工作的。嵌入所有三个解释器根本不成问题(假设您愿意为每个人提供自己的主线程)。鉴于您正在谈论py2app 之类的工具,这听起来不像您要问的。还应该可以在 Python C 扩展模块中嵌入 Ruby 或 Lua 解释器,这样您就可以实现相同的基本想法,但无需使用 C 语言编写顶级应用程序。这听起来有趣吗?
  • 语言之间的脚本是否需要相互通信?
  • 你有关于如何在 Python 中添加 Ruby 和 Lua 解释器的资源吗?我认为这将是很好的学习。
  • @user2967106:我从来没有真正将 Ruby 嵌入到任何东西中,而 Lua 自从……早在 5.0 版之前,它清理了所有东西。所以我不会有太多直接的帮助。但是看看像 Lunatic Python 这样的项目,它 (IIRC) 将 Lua 嵌入到 Python 扩展中,仅用几百行代码就可以在两个运行时之间建立完整的桥梁。就算不能直接使用,代码也要做出好的示例代码。
  • 在 PyPI 中搜索 rubylua 会发现一些其他有趣的东西,比如 lupa 和 pyruby。

标签: python ruby lua 2d-games


【解决方案1】:

将它们全部组合成一个可执行文件是很困难的。将它们组合成一个应用程序,并不难。

我们以 py2app 为例。它构建了一个 OS X 应用程序包——一个充满文件的目录。在 Frameworks 子目录中有一个完整的 Python 解释器和一个自定义标准库。您的应用程序的 Python 源代码(和/或 .pyc 字节码)和所有数据文件都在 Resources 子目录中。最后,在 MacOS 子目录中,有两件事:一个标准的 python 存根可执行文件,它使用您的自定义标准库运行 Python,另一个使用您的应用程序名称的存根可执行文件,它使用您的自定义标准库运行 Python 并执行你的主脚本。

想象一下,你有一个用于 Ruby 和 Lua 的相同工具。

您可以非常轻松地构建一个应用程序包,将每个框架放入 Frameworks 目录,将所有三种语言的所有源代码和所有数据文件放入 Resources 目录,然后将所有三个MacOS 目录中的存根可执行文件。无论您的哪个脚本是主程序,您都只保留该脚本的存根可执行文件。

只要您的脚本知道如何找到 python、lua 和 ruby​​ 存根可执行文件来启动其他脚本(您可以通过例如在主脚本开始时修改环境中的 PATH 来做到这一点),一切有效。

还有一个更简单的解决方案:py2app(以及ruby2applua2app)分别对每个应用程序进行打包,然后将完整的应用程序打包到包中(例如,在@ 下的Applications 目录中) 987654331@ 目录)并以这种方式运行它们。不利的一面是,如果您有 20 个不同的 Python 脚本,您最终将获得 20 个完整的 Python 安装,这将是一个相当大的下载量。

但您可以在两者之间进行折中:将所有 Python 应用程序合并到一个包中,将所有 Ruby 应用程序合并到另一个包中,并将所有 Lua 应用程序合并到另一个包中。

在实践中这样做的问题是您实际上没有用于 Ruby 和 Lua 的相同工具。你有不同的工具,它们可以构建不同的结构。而且您没有用于 Windows 的相同工具(py2exe 构建了一个非常不同的结构,并使用了非常不同的配置设置)。因此,如果您有 N 种语言和 M 个平台,则需要了解(最多)N*M 种不同结构的笛卡尔积。

而且您确实需要所有单独的工具。 py2app 不能用于 Ruby 或 Lua 代码或 Windows 代码,因为它需要理解 Python 模块——包括 Python C 扩展模块,它必须在 Mach-O 级别和 Python API 上理解这些模块级别——为了找出依赖关系并获取正确的文件,并找出将它们放在包中的正确位置,以便解释器可以找到它们,等等。

不过,这绝对是可行的——我参与了两个项目,它们按照我上面描述的方式捆绑了用两种或三种不同脚本语言编写的多个脚本。

【讨论】:

  • “一切正常”...缓慢而低效。 (没有反对您的回答,我只是认为应该以极端的偏见重新考虑OP的想法。)
  • @Amadan:在什么方面它缓慢而低效?它与任何用 Python、Ruby 或 Lua 编写并独立分发的应用程序完全相同工作。
  • 哇,答案很好。 :)
  • 加载多语言解释器肯定是对内存的低效使用,并且也会影响速度。
  • @abarnert:马克说了什么。此外,在不同的解释器之间传输数据,因为它们不共享对象空间。
【解决方案2】:
  1. 没有。可以使用这些语言的 JVM 版本来创建 JVM 类,然后将它们 JAR。除了 jRuby,我从来没有用过任何一个。

  2. 为什么同时使用三种相似的脚本语言?就像吃意大利面配土豆泥和面包一样。

【讨论】:

  • 它们非常相似,但各有优劣。我希望能够选择他们最擅长的并以此为基础。
猜你喜欢
  • 2010-11-12
  • 2012-06-08
  • 2013-03-31
  • 2010-11-19
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2021-07-20
相关资源
最近更新 更多