在mac上使用cython和emscripten将普通python程序编译为javascript

在mac上使用cython和emscripten将普通python程序编译为javascript,javascript,python,node.js,cython,emscripten,Javascript,Python,Node.js,Cython,Emscripten,我正在尝试使用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.ou

我正在尝试使用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
我明白了

它仍然会生成一个
a.out.js
文件,我尝试在node.js中运行该文件

>>> node a.out.js
我得到一个参考错误

>>> ReferenceError: _Py_SetProgramName is not defined
我试着稍微修改一下生成的javscript,但基本上我认为所有的
\u Py
函数都没有定义


有没有人对此有任何经验,或者有任何建议的修复方法?

要使其正常工作,我认为您需要通过
emcc
将整个Python编译成JavaScript,以便将适当的库编译成
node.js
可以处理的代码。否则,您拥有的二进制库将保持不变。你不能混为一谈

事实上,如果您仔细阅读,emcc会向您发出警告


在编译自己的脚本之前,您需要了解如何将Python交叉编译成javascript。这已经完成了,因为我在上看到了它。

您还需要将EmbeddeAbble python库
-lpython2.7
编译为JavaCScript,以便它可用于您的JavaCScript程序

谢天谢地,这方面的工作已经完成了。它提供了编译为Javascript的嵌入式python


您应该能够使用empythoned提供缺少的
\u Py\u SetProgramName

哇。通过C从Python到Javascript?想知道您的用例是什么吗?物理模拟是用python编写的,带有numpy,我很想进入浏览器。我也想用numpy编写向量操作,用Three.js编写可视化,但那是非常一厢情愿的想法!Numpy将很难移植到javascript。建议在服务器上运行模拟并通过websocket更新可视化。我以前也做过同样的事情,WebGL只是一个物理引擎的演示前端,在服务器上运行,使用python、sockJS和tornado reactor作为服务器。很好。也许,你可能是对的,谢谢你的建议。
>>> ReferenceError: _Py_SetProgramName is not defined