Eoi*_*ray 5 javascript python cython node.js emscripten
我试图使用cython和emscripten从python生成javascript.
hello.py:
print 'Hello world.'
Run Code Online (Sandbox Code Playgroud)
然后我使用cython将其编译为c
>>> cython --embed hello.py -v
Run Code Online (Sandbox Code Playgroud)
这会生成一个hello.c我编译的文件
>>> gcc hello.c -I/usr/include/python2.7/ -lpython2.7
Run Code Online (Sandbox Code Playgroud)
这适用于gcc或clang.当我执行时,./a.out我得到预期的输出
>>> ./a.out
>>> Hello world
Run Code Online (Sandbox Code Playgroud)
接下来我想hello.c使用emscripten 编译为javascript
>>> emcc hello.c -I/usr/include/python2.7/ -lpython2.7
Run Code Online (Sandbox Code Playgroud)
我明白了
>>> 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++'
Run Code Online (Sandbox Code Playgroud)
它仍然生成一个a.out.js我尝试在node.js中运行的文件
>>> node a.out.js
Run Code Online (Sandbox Code Playgroud)
我收到了参考错误
>>> ReferenceError: _Py_SetProgramName is not defined
Run Code Online (Sandbox Code Playgroud)
我尝试稍微更改生成的javscript,但基本上我认为所有_Py_函数都没有定义.
有没有人对此有任何经验,或任何建议的修复?
您还需要将embedabble python库编译为javacsript -lpython2.7,以便它可用于您的javacsript程序.
值得庆幸的是,这项工作已经在empythoned中完成.这提供了一个嵌入式python编译为Javascript.
您应该能够使用empythoned来提供缺失 _Py_SetProgramName