I'd like to know how can I call Mathematica functions from Python.
I appreciate a example, for example, using the Mathematica function Prime.
I had search about MathLink but how to use it in Python is a little obscure to me.
I tried to use a Mathematica-Python library called pyml but I hadn't no sucess, maybe because this lib looks very old (in tutorial says Mathematica 2 or 3).
So, someone knows a good way to write python programs who uses Mathematica functions and can give me an example?
Old Edit:
Maybe this edit can help someone who wants to use mathlinks directly.
To another solution, please see the answer accepted.
Using the Wolfram/Mathematica/8.0/SystemFiles/Links/Python I could had sucess in compiling the module changing some things in setup.py.
My architechture is x86-64
.
1-Change the mathematicaversion
to 8.0
.
2-Changing the lib name ML32i3
to ML64i3
.
3-Copying the file Wolfram/Mathematica/8.0/SystemFiles/Libraries/Linux-x86-64/libML64i3.so
to the path pointed in setup.py library_dirs = ["/usr/local/Wolfram/Mathematica/" + mathematicaversion + "/SystemFiles/Links/MathLink/DeveloperKit/Linux/CompilerAdditions"]
.
5-Compiling the source with sudo python setup.py build
.
6-Installing the lib with sudo python setup.py install
4-Editing the file /etc/ld.so.conf
and putting the line
include /usr/local/lib
.
5-Creating a directory in /usr/local/lib/python2.6/dist-packages/mathlink
with the lib libML64i3.so
.
6-Running sudo ldconfig
I had tested the scripts guifrontend.py
with python guifrontend.py -linkname "math -mathlink" -linkmode launch
and textfrontend.py
with python textfrontend.py -linkname "math -mathlink" -linkmode launch
and worked fine.
Looks like I almost. But the script
>>> from mathlink import *
>>> import exceptions,sys, re, os
>>> from types import ListType
>>> mathematicaversion = "8.0"
>>> os.environ["PATH"] = "/usr/local/Wolfram/Mathematica/" + mathematicaversion + ":/usr/local/bin:/usr/bin:/bin"
>>> e = env()
>>> sys.argv=['textfrontend.py', '-linkname', 'math -mathlink', '-linkmode', 'launch']
>>> kernel = e.openargv(sys.argv)
>>> kernel.connect()
>>> kernel.ready()
0
>>> kernel.putfunction("Prime",1)
>>> kernel.putinteger(10)
>>> kernel.flush()
>>> kernel.ready()
0
>>> kernel.nextpacket()
8
>>> packetdescriptiondictionary[3]
'ReturnPacket'
>>> kernel.getinteger()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
mathlink.error: MLGet out of sequence.
breaks in the last command and I don't know why. How can I fix this?
SystemFiles/Links/Python
in the Mathematica installation directory. You need to compile the C language part yourself before you can use this. This link is unsupported an the readme file says: "WRI has made no attempt to make the mathlink module compliant with versions of Python newer than 2.3.". I never used it so I can't tell you if it works with newer Pythons, but I'd give it a try. $\endgroup$python setup.py build
. $\endgroup$numpy
is an extensive math library forPython
, for example. $\endgroup$