【发布时间】:2013-06-12 11:15:00
【问题描述】:
我正在尝试使用 cython 和 emscripten 从 python 生成 javascript。
hello.py:
print 'Hello world.'
然后我使用 cython 将其编译为 c
>>> cython --embed hello.py -v
这会生成一个hello.c 文件,我用它来编译
>>> gcc hello.c -I/usr/include/python2.7/ -lpython2.7
这适用于 gcc 或 clang。
当我执行 ./a.out 时,我得到了预期的输出
>>> ./a.out
>>> Hello world
接下来我想使用 emscripten 将 hello.c 编译为 javascript
>>> emcc hello.c -I/usr/include/python2.7/ -lpython2.7
我明白了
>>> WARNING emcc: -I or -L of an absolute path encountered.
>>> If this is to a local system header/library, it may cause problems
>>> (local system files make sense for compiling natively on your system,
>>> but not necessarily to JavaScript)
>>> clang: warning: argument unused during compilation: '-nostdinc++'
它仍然会生成一个 a.out.js 文件,我尝试在 node.js 中运行该文件
>>> node a.out.js
我得到一个参考错误
>>> ReferenceError: _Py_SetProgramName is not defined
我尝试稍微改变一下生成的 javscript,但基本上我认为所有的_Py_ 函数都没有定义。
有没有人有这方面的经验,或任何建议的修复?
【问题讨论】:
-
哇。 Python 通过 C 到 Javascript?想知道您的用例是什么?
-
物理模拟用 python 和 numpy 编写,我很想进入浏览器。我也很想用 numpy 编写向量操作并用 Three.js 进行可视化,但那是非常一厢情愿的想法!
-
Numpy 很难移植到 javascript。它使用了一些用FORTRAN 编写的原生库。
-
建议在服务器上运行模拟并通过 websocket 更新可视化。过去我做过同样的事情,WebGL 只是使用 python、sockJS 和龙卷风反应器作为服务器在服务器上运行的物理引擎的演示前端。效果很好。
-
也许,你可能是对的,谢谢你的建议。
标签: javascript python node.js cython emscripten