我可以在Racket中使用Python代码和库吗?我已经在PyonR (https://github.com/pedropramos/PyonR)中安装了DrRacket,所以我可以选择"#lang“并运行DrRacket代码。但是,如何为我的应用程序组合Racket和Python语言代码呢?
在https://github.com/nurv/pnil,也有一个有限的Python翻译程序。球拍中有类似的东西吗?
编辑:正如评论中所建议的,我尝试了如下。文件"pysamples.rkt“中的python代码在DrRacket中工作得很好:
#lang python
def greet(name):
print 'Hello', name
greet('Alfred')输出:
Hello Alfred我试着在球拍代码中使用上面的定义,但是它不起作用。以下是球拍代码:
#lang racket
; (require python/config) (enable-cpyimport!) ; ran this once; worked.
(#%require "pysamples.rkt")
(greet "Racket_code")错误是:
greet: unbound identifier in module in: greet发布于 2016-08-28 17:33:33
据我所知,PyonR项目是最接近使用的使用方式。但是,请注意,用Python编写的Python库与作为C库之上的瘦Python层的Python库之间存在差异。正如你所经历的那样,后一种类型不起作用(至少据我所知--但佩德罗才是该问的人)。
如果您需要使用用X语言编写的库(因为X可以是Python),您可以使用X语言编写一个“侦听器”程序,该程序等待来自Racket程序的消息,当收到消息时,计算一个答案并将其发回给Racket程序。如何发送和接收消息取决于您,但一个简单的选项是有两个文件,一个是"R- to -X“,它的拍写和X读取,和另一个”X到R“,其中球拍接收到的信息。
这种方法有一些开销,但是如果计算时间比发送消息更长,那么它就是一个可行的解决方案。
发布于 2016-08-27 22:19:16
与自述相适应 --您可以导入python2.7包,但是您需要使用cpyimport。其中一个例子如下所示:
#lang python
cpyimport numpy as np
from "racket" import time
def add_arrays(n):
result = np.zeros((100,100))
for i in range(n):
result += np.random.randint(0, 100000, (100,100))
return result
print time(add_arrays(10000))看一看代码,您可以导入一个纯python库,给出它在球拍路径中,并给出了#lang python的最高行。所有定义的都是导出的。
发布于 2017-01-28 01:54:31
前面的答案和评论解决了某些Python库的困难,但是如果您只对在Racket模块中使用纯Python文件中的函数感兴趣,请尝试如下所示:
在文件“greetings.py”中:
#lang python
def greet(name):
print 'Hello', name拍子:
#lang racket
(require python)
(py-import "greetings" as python-module)
(py-method-call python-module "greet" "Racket")https://stackoverflow.com/questions/39181788
复制相似问题