У меня есть код мудреца, который я хотел бы позвонить из Haskell. Следующий код использует cpython назвать чисто питон скрипт:Calling Sage из Haskell
test.py:
def pytest():
return 3.5+2
Main.hs:
import qualified CPython as Py
import qualified CPython.Protocols.Object as Py
import qualified CPython.Types as Py
import qualified CPython.Types.Module as Py
import qualified CPython.System as Py
import qualified CPython.Types.Float as Py
import qualified Data.Text as T
import GHC.IO.Handle.FD
import Data.Maybe
main :: IO()
main = do
Py.initialize
path <- Py.getPath
Py.setPath $ T.pack $ ".:" ++ T.unpack path -- path to the module to load
test <- Py.importModule $ T.pack "test"
uname <- Py.getAttribute test =<< (Py.toUnicode (T.pack "pytest"))
res <- Py.callArgs uname []
Py.print res stdout
res' <- Py.fromFloat =<< fromJust <$> Py.cast res
print $ (res' + 2.0 :: Double)
Когда я компилирую Main.hs и запустить его, я получаю ожидаемый выход:
5.5
7.5
Если добавить к from sage import *
test.py, я получаю (как только я кот ch исключение) ImportError("No module named 'sage'",)
. Конечно, test.py загружается штрафом непосредственно от мудреца. Я ожидал, что замена исполняемого файла python
символической ссылкой на исполняемый файл sage
устранит проблему, но я все равно получаю ту же ошибку.
Кто-нибудь знает, как заставить cpython работать с шалфеем или любым другим способом вызвать скрипт sage из Haskell?
Как установлен шалфей? Что произойдет, если вы назовете «путь печати»? (просто убедитесь, что библиотеки мудрецов находятся на пути) – pdexter
Почему вы считаете, что изменение символической ссылки устранит проблему? Ваш вызов Haskell, очевидно, напрямую вызывает API CPython, поэтому он вообще не использует интерпретатор python, но он * создает * свой собственный интерпретатор внутри программы Haskell с использованием API-интерфейса CPython. К сожалению, это, вероятно, означает, что он не смотрит на системный каталог, о котором вы думаете. Попробуйте добавить путь к пакету 'sage' в' sys.path'. – Bakuriu
@pdexter Странно, я получаю ошибки разбора, когда включаю «печать» в файле python, даже перед тем, как попробовать любой бизнес шалфея. – crockeea