Python 从Haskell给Sage打电话

Python 从Haskell给Sage打电话,python,haskell,sage,Python,Haskell,Sage,我想从Haskell那里调用一些sage代码。以下代码用于调用纯python脚本: test.py: def pytest(): return 3.5+2 Main.hs: 将合格的CPython作为Py导入 将符合条件的CPython.Protocols.Object作为Py导入 导入合格的CPython。类型为Py 将合格的CPython.Types.Module作为Py导入 将合格的CPython.System作为Py导入 将符合条件的CPython.Types.Float作为P

我想从Haskell那里调用一些sage代码。以下代码用于调用纯python脚本:

test.py:

def pytest():
    return 3.5+2
Main.hs:

将合格的CPython作为Py导入
将符合条件的CPython.Protocols.Object作为Py导入
导入合格的CPython。类型为Py
将合格的CPython.Types.Module作为Py导入
将合格的CPython.System作为Py导入
将符合条件的CPython.Types.Float作为Py导入
导入符合条件的数据。文本为T
导入GHC.IO.Handle.FD
导入数据,也许吧
main::IO()
main=do
Py.initialize
路径真正的问题是您使用的是“哪种”Python;Sage使用自己的Python,而不是您的系统Python。您可能希望尝试从中创建链接

$ pwd; local/bin/python --version
/Users/.../Downloads/sage
Python 2.7.10
$

原则上,这是您需要链接到的。实际上,您可能希望阅读有关更多链接的Sage文档,或其他有关运行脚本的文档。但无论如何,只有Python可以使用sage导入的
*

sage是如何安装的?如果调用
打印路径
,会发生什么情况?(只是确保sage库在正确的路径上)为什么您认为更改符号链接可以解决这个问题?您的Haskell调用显然是直接调用cpythonapi,因此它根本不运行python解释器,而是使用cpythonapi在Haskell程序中创建自己的解释器。不幸的是,这可能意味着它没有查看您正在考虑的系统目录。尝试将路径添加到
sys.path
@pdexter中的
sage
包奇怪的是,在python文件中包含“print”时,甚至在尝试任何sage业务之前,我就遇到了解析错误。@Bakuriu将路径添加到
sage
可执行文件中不起作用(我也不希望它起作用),添加sage的
python
可执行文件的路径(在
SageMath/local/bin
中)也没有帮助。我想用Haskell打印它。您还需要添加sage库的路径,而不是可执行文件。我知道sage使用自己的python,这就是我创建符号链接的原因。你的建议和我尝试的有什么不同?我不知道你做了什么,所以我提出了这个建议;请注意,您说您链接到了Sage二进制文件,而不是相关联的Python二进制文件(这肯定是不同的)。无论如何,事实证明,很多人在没有意识到Sage和“它的”Python的情况下问这个问题,所以我认为这会有所帮助;不幸的是,除此之外我无能为力,因为我没有使用从其他程序调用的Sage,更不用说从Haskell(其中我已经编译了两个程序)调用的Sage了。
$ pwd; local/bin/python --version
/Users/.../Downloads/sage
Python 2.7.10
$