跳到内容

WolframResearch/WolframWebEngineForPython

用于Python的Wolfram Web引擎

用于Python的Wolfram Web引擎使用Python-AIOHTTP Web服务器来处理对Wolfram引擎的请求。使用标准Wolfram语言功能在服务器上指定网页,如API函数,窗体函数,表单页,URL调度器,询问功能,HTTP响应,HTTP重定向等。这允许您集成Wolfram语言与Django和AIOHTTP等现有Python web应用程序无缝集成。

入门

前提条件

  1. Python 3.5或更高版本
  2. Wolfram Language 11.3或更高版本(Mathematica、Wolfram Desktop或Wolfram Engine)
  3. WolframClientForPython

使用pip安装(推荐)

建议大多数用户使用。它安装了Wolfram Research发布的最新稳定版本。

评估终端中的以下命令:

>>>pip3安装钨发动机

使用Git安装

建议希望安装库和完整源代码的开发人员使用。克隆库的存储库:

>>>git克隆git://github.com/WolframResearch/WolframWebEngineForPython

在站点包目录中安装库:

>>>光盘WolframWebEngineForPython>>>pip3安装。

以下方法不是全局安装库,因此所有示例命令都需要从克隆的目录运行。

启动演示服务器

通过执行以下操作启动演示服务器:

python3-mwolframbeengine——演示----------------------------------------------------------------------地址http://localhost:18000/文件夹/Users/rdv/Desktop/wolframengineforpython/wolfrembeengine/examples/demoapp索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

现在您可以在以下地址打开web浏览器http://localhost:18000/

形象

构建应用程序的两种不同方式:

  1. 将单个文件与URLDispatcher一起使用
  2. 在目录布局中使用多个文件

带有URLDispatcher的单个文件

运行服务器的一种方法是将所有请求定向到单个文件运行Wolfram语言的URL调度器功能。

在名为调度员。:

URL调度器[{“/api”->APIFunction[“x”->“String”],“/form”->窗体函数[“x”->“字符串”],“/”->“你好,世界!”}]

从同一位置运行:

>>>python3-m wolframweb引擎调度器.m----------------------------------------------------------------------地址http://localhost:18000/文件/Users/rdv/Desktop/dispatcher.m----------------------------------------------------------------------(按CTRL+C退出)

所有传入的请求现在都将路由到URL调度器中的函数调度员。.现在可以在浏览器中打开以下URL:

http://localhost:18000/http://localhost:18000/formhttp://localhost:18000/api

有关的更多信息URL调度器请参阅联机文档.

目录布局中的多个文件

编写应用程序的另一种方法是创建由服务器提供服务的目录结构。每个文件的url将与文件的目录路径匹配。

服务器将按照以下规则提供内容:

  1. 所有扩展名为“.m”、“.mx”、“.wxf”和“.wl”的文件都将在内核中使用生成HTTPResponse文件内容。
  2. 任何其他文件都将作为静态内容。
  3. 如果请求路径对应于磁盘上的目录,服务器将在该目录中搜索名为index.wl的文件。可以使用--index选项更改此约定。

通过在当前位置运行以下代码创建应用程序:

mkdir测试mkdir测试程序/表单mkdir测试pp/apiecho'ExportForm[{“hello”,UnixTime[]},“JSON”]'>testapp/index.wlecho'FormFunction[“x”->“String”]'>testapp/form/index.wlecho'APIFunction[“x”->“数字”,#x!&]'>testapp/api/index.wlecho'HTTPResponse[“hello world”]'>测试pp/response.wlecho'[“some”,“static”,“JSON”]'>testapp/static.JSON

通过运行以下命令启动应用程序:

>>>python3-m沃尔夫兰·本杰恩·特斯塔普----------------------------------------------------------------------地址http://localhost:18000/文件夹/用户/rdv/桌面/testapp索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

然后在以下位置打开浏览器:

http://localhost:18000/http://localhost:18000/formhttp://localhost:18000/api?x=4http://localhost:18000/response.wlhttp://localhost:18000/static.json

多文件应用程序结构的一个优点是很容易扩展应用程序。您只需将新文件放在应用程序目录中的适当位置,它们就会自动提供服务。

使用Docker

Wolfram Web Engine for Python可用作来自Docker Hub的容器图像用于集装箱化环境。

此图像基于官方Wolfram Engine Docker图像; 有关产品激活和许可条款的信息在上可用Docker Hub页面对于后一个图像。

#在主机的端口8080上公开服务器>>>docker run-ti-p 8080:18000 wolframresearch/wolframebengineforpython--演示#提供/srv目录中的文件>>>docker run-ti-p 8080:18000 wolframresearch/wolframebengineforpython/srv公司

上述命令不包括激活/许可配置;请参阅官方Wolfram Engine Docker图像有关激活Wolfram引擎内核的信息。

关于按需授权的注意事项:由于WolframWebEngineforPython不使用WolframScript-权利命令行选项和WOLFRAMSCRIPT_ENTITLEMENTID环境变量不能用于将按需许可授权ID传递到此映像内的Wolfram引擎内核。作为一种解决方法沃尔夫拉米尼可以将环境变量设置为将授权ID和许可证服务器地址传递给内核:

>>>docker运行-ti-p 8080:18000--env WOLFRAMINIT='-pwfile!cloudlm.wolfram.com-授权O-WSTD-DA42-GKX4Z6NR2DSZR'wolframresearch/wolframbeengineforpython--演示

选项

>>>python3-m wolframbeengine--帮助用法:__main__.py[-h][-端口端口][-域域域][-内核内核内核][--池大小poolsize][--缓存][--惰性][--索引索引][--demo[{None,ask,trip,ca,form}]][路径]位置参数:路径可选参数:-h、 --帮助显示此帮助消息并退出--端口port插入端口。--域域插入域。--kernel kernel插入内核路径。--poolsize poolsize插入内核池大小。--启动超时秒池中内核的启动超时(秒)。--cached服务器将缓存WL输入表达式。--惰性服务器将在第一个请求。--index index搜索文件夹索引的文件名。--演示[{None,ask,trip,ca,form}]运行演示应用程序

演示

运行演示应用程序:

  1. :使用AskFunction的边际税率计算器。
  2. 旅行:使用FormFunction和TravelDirections的行程计算器。
  3. 加利福尼亚州:使用URLDispatcher和GalleryView的Cellular Automaton演示库。
  4. 形式:使用FormFunction的ImageProcess演示。
>>>python3-m wolframbeengine--演示ca----------------------------------------------------------------------地址http://localhost:18000/文件/Users/rdv/Wolfram/git/wolframengineforpython/wolframwebengine/examples/demo/ca.wl----------------------------------------------------------------------(按CTRL+C退出)

路径

第一个参数可以是文件夹或单个文件。

在当前文件夹中写入文件:

>>>mkdir测试>>>echo'ExportForm[{“hello”,“from”,“Kernel”,UnixTime[]},“JSON”]'>testapp/index.wl

然后从命令行运行:

>>>python3-m沃尔夫兰·本杰恩·特斯塔普----------------------------------------------------------------------地址http://localhost:18000/文件夹/Users/rdv/Desktop/testapp指数指数wl----------------------------------------------------------------------(按CTRL+C退出)

如果第一个参数是一个文件,如果url扩展名为“.m”、“.mx”、“.wxf”和“.wl”,则请求将重定向到该目录中的文件。如果内核无法处理扩展名,则该文件将用作静态内容。

如果请求路径是一个文件夹,服务器将在同一文件夹中搜索index.wl。

--索引

指定文件夹索引的默认文件名。默认为index.wl

python3-m wolframbeengine--索引索引.wxf----------------------------------------------------------------------地址http://localhost:18000/文件夹/用户/rdv/桌面索引索引.wxf----------------------------------------------------------------------(按CTRL+C退出)

--缓存的

如果存在--cached,则每个文件中的代码将只运行一次,随后的请求将检索缓存的结果。

>>>python3-m wolframbeengine--缓存----------------------------------------------------------------------地址http://localhost:18000/文件夹/用户/rdv/桌面索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

访问浏览器并刷新页面。

--港口port

允许您指定Web服务器的端口。默认为18000。

>>>python3-m wolframwebeengine--端口9090----------------------------------------------------------------------地址http://localhost:9090/文件夹/用户/rdv/桌面索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

--域domain

允许您指定Web服务器的域。默认情况下,Web服务器只侦听本地主机,请使用0.0.0.0监听所有网络接口。

>>>python3-m wolframbeengine--域0.0.0.0----------------------------------------------------------------------地址http://0.0.0.0:18000/文件夹/用户/rdv/桌面索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

--initfile文件

允许您指定一个自定义文件,其中包含启动新内核时要运行的代码

>>>python3-m wolframbeengine--初始化文件myinit.m----------------------------------------------------------------------地址http://localhost:18000/文件夹/用户/rdv/桌面索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

--内核内核

允许您指定内核路径

>>>python3-m wolframwebengine--内核'/Applications/Wolfram Desktop 12.app/Contents/MacOS/WolframKernel'----------------------------------------------------------------------地址http://localhost:18000/文件夹/用户/rdv/桌面索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

--池大小SIZE

WolframWebEngineforPython将启动一个WolframLanguage内核池来处理传入的请求。如果多个请求同时到达,运行多个内核可以提高响应能力。--poolsize选项允许您更改将启动的内核数。默认为1。

>>>python3-m钨矿床--池大小4----------------------------------------------------------------------地址http://localhost:18000/文件夹/用户/rdv/桌面索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

--启动超时秒

默认情况下,如果内核在20秒后仍未就绪,则启动内核的尝试将被中止。如果应用程序包含长时间运行的初始化代码,则可能需要提高此超时。

>>>python3-m钨金(...)内核进程以PID:485启动套接字异常:无法从套接字读取任何消息tcp://127.0.0.1:5106在20.0秒和245次重试之后。启动失败。>>>python3-m wolframbeengine--启动时间50(...)内核进程已启动,PID:511已连接到日志套接字:tcp://127.0.0.1:5447协议内核511已就绪。启动时间为35.43秒。

--懒惰的

如果出现该选项,服务器将等待第一个请求生成内核,而不是立即生成内核。

--客户端最大大小MB

文件上载允许的最大MB数。默认为10。

>>>python3-m wolframbeengine--客户端最大大小150----------------------------------------------------------------------地址http://localhost:18000/文件夹/用户/rdv/桌面索引Index.wl----------------------------------------------------------------------(按CTRL+C退出)

集成现有应用程序

Wolfram Web Engine for Python可用于扩展现有的Python应用程序,而不是创建新的应用程序。我们目前支持以下框架:

Django公司

如果您有一个现有的Django应用程序,您可以使用django_wl_视图decorator在web请求期间评估Wolfram语言代码。

__未来__进口 绝对导入,打印函数,unicode多边

 让戈.http协议 进口 Http响应
 让戈.网址 进口 路径

 wolframclient公司.语言 进口 禽流感
 wolframclient公司.评价 进口 Wolfram语言会话
 钨金发动机.网状物 进口 django_wl_视图

阶段 = Wolfram语言会话()定义 django_view公司(请求):返回 Http响应(“来自django的你好”)@django_wl-view(django_wl-view)(阶段)
定义 表单视图(_V)(请求):返回 禽流感.窗体函数({“x”:“字符串”},禽流感.身份,“JSON”)@django_wl_视图(阶段)
定义 api视图(请求):返回 禽流感.API功能({“x”:“字符串”},禽流感.身份,“JSON”)url模式 =[路径("",django_view公司,名称=“家”),路径(“表单”,表单视图(_V),名称=“表单”),路径(“api”,api视图,名称=“api”),]

装饰器可以与WolframClientForPython中公开和记录的任何类型的同步计算器一起使用。

Aiohttp公司

如果您有一个现有的Aiohttp服务器正在运行,您可以使用aiohttp_wl_viewdecorator在web请求期间评估Wolfram语言代码。

 aiohttp协议 进口 网状物

 Wolfram客户端.评价 进口 WolframEvaluator池
 wolframclient公司.语言 进口 禽流感
 钨金发动机.网状物 进口 aiohttp_wl_view

阶段 = WolframEvaluator池(池大小=4)路线 = 网状物.路由表定义()@路线.得到("/")
异步 定义 你好(请求):返回 网状物.响应(文本=“来自aiohttp的您好”)@路线.得到(“/form”)
@aiohttp_wl_view(aiohttp_wl_view)(阶段)
异步 定义 表单视图(_V)(请求):返回 禽流感.窗体函数({“x”:“字符串”},禽流感.身份,外观规则={“标题”:“来自WL的您好!”})@路线.得到(“/api”)
@aiohttp_wl_view(阶段)
异步 定义 api视图(请求):返回 禽流感.API功能({“x”:“字符串”},禽流感.身份)@路线.得到(“/app”)
@aiohttp_wl_view(阶段)
异步 定义 应用视图(_V)(请求):返回 禽流感.一次(禽流感.获取(“路径/to/my/complex/wl/app.wl”))应用程序 = 网状物.应用程序()应用程序.添加路由(_R)(路线)如果 __姓名__ == “__main__”:网状物.运行应用程序(_A)(应用程序)

装饰器可以与WolframClientForPython中公开和记录的任何类型的异步计算器一起使用。