在mac上使用cython和emscripten编译琐碎的python程序到javascript
Compiling trivial python program to javascript using cython and emscripten on mac
我正在尝试使用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
我试着改变生成的javascript一点点,但基本上我认为所有的_Py_
函数都没有定义。
有没有人对此有任何经验,或任何建议的修复?
您还需要将可嵌入的python库-lpython2.7
编译为javacscript,以便它可用于您的javacscript程序。
您应该能够使用python来提供缺失的_Py_SetProgramName
为了使其工作,我认为您需要由emcc
编译到JavaScript的整个Python,以便将适当的库编译成node.js
可以处理的代码。否则,您拥有的二进制库将保持完整。你不能把它们混在一起。
事实上,如果你仔细阅读emcc
,它会用警告通知你。
在编译自己的脚本之前,您需要了解如何将Python cross-compile
转换为javascript。这已经完成了,因为我在replit上看到了。
Pyodide终于(多年后)妥善解决了这个问题。参见https://pyodide.org/en/stable/pyoide的许多组件都是部分使用Cython编写的。
相关文章:
- 如何让Meteor应用程序使用python脚本写入数据库
- 如何使用Python/Selenium网络驱动程序处理Angularjs/Javascript下拉列表
- 让python通过浏览器与本地Flask应用程序对话
- 在引导程序中从 HTML 表单执行 Python (CGI) 文件.带有Apache Server的JS
- 将标志从Node/Express应用程序Python shell传递到Python脚本
- 如何使用ajax将字符串传递给python程序,然后将字符串发回
- 如何在 python 应用程序中有效地提供 JS 和 CSS
- 如何从PHP或Javascript调用python程序(具有命令行参数)
- 如何将jQuery附加到Selenium的PhantomJS驱动程序(Python绑定)
- 如何使用Python Flask应用程序在D3JS图表中动态加载JSON数据
- 如何从 Atom 电子应用程序调用 Shell 脚本或 python 脚本
- Python Flask 应用程序,AJAX 帖子收到 400 个错误请求
- OSError: [Errno 98] 地址已在使用中(由公共服务器托管的 Python 程序)
- 使用 jinja2 和 google app engine 将数据从 python 处理程序获取到 javascript
- 无法在浏览器中运行 python Web 应用程序
- 如何在Python应用程序中显示网站
- 尝试将Python/flask应用程序部署到Heroku时,未能绑定到$PORT
- 在mac上使用cython和emscripten编译琐碎的python程序到javascript
- “本网站的所有者已经根据您的浏览器的签名禁止您访问”;. .在python程序中的url请求上
- 在 Python 程序中包装画布标签 + javascript 的最简单方法