如何将用 python 编写的函数编译为 JavaScript (emscripten)?
Posted
技术标签:
【中文标题】如何将用 python 编写的函数编译为 JavaScript (emscripten)?【英文标题】:How compile function written in python to JavaScript (emscripten)? 【发布时间】:2013-11-05 11:53:03 【问题描述】:我有一个用 python 编写的简单函数,我想移植到 javascript。
我已经将 python 2.7 编译成一个 .so 库,所以这不是问题。
我遇到的问题是,在我用 cython 编译程序后,函数名都被打乱了,这意味着我在运行 emcc 时不知道如何保留函数。
有人有使用emscripten将python程序编译成js的经验吗?
任何信息将不胜感激。
注意:我想保留 python 的确切功能,我不想要将 python 程序转换为 javascript 的东西。
【问题讨论】:
有更直接的方法可以将 Python 转换为 JavaScript,这可能更适合您的情况。此处 Python 部分中列出的项目:altjs.org/#ports 和此处:github.com/jashkenas/coffee-script/wiki/… 对您来说可能都是可行的选择。 您可能还会发现这个项目很有趣:github.com/replit/jsrepl。它是 javascript 中的多语言脚本引擎,您可以在浏览器中运行。支持 Python(我认为它是使用 emscripten 移植到的)。因此,您可以将 Python 发送到浏览器,而不是将 Python 编译为 js。 鉴于我在下面找到并发布的 SO 问题,我认为 @slebetman 是对的,即 jsrepl 执行针对其 emscripten 编译的 CPython 解释器运行任意 Python 代码的那种事情将是如果您想保留原始 Python 代码,您最好的选择。 github.com/replit/empythoned 是他们的 Python 特定示例。 您还可以使用 Skulpt 在 JavaScript 中运行 Python 脚本:skulpt.org 【参考方案1】:另一个问题的答案已被接受,抱怨同样的问题:Cython mangling function names and making it hard to access from C++:Embed python function in C++
接受的答案表明 Cython 根本不适合这种事情,这表明你不能以这种方式做你想做的事:
您将无法以这种方式获得所需的互操作性。如果您打开并检查 hello.c,您将不会在其中的任何地方找到“static int say_hello”。 Cython 旨在让 Python 使用 C 库,而不是让 C 库使用 python。
不接受的下一个答案表明指定 public
不会破坏函数名称,尽管他也提到了链接问题。
# (in the generated C file hello.c)
__PYX_EXTERN_C DL_IMPORT(...) say_hello(...);
值得一试,但如果失败,请考虑 cmets 中的其他选项。
【讨论】:
对,但是我的函数名在通过 cython 后被打乱了,“my_func”现在被称为“以上是关于如何将用 python 编写的函数编译为 JavaScript (emscripten)?的主要内容,如果未能解决你的问题,请参考以下文章