Differences between revisions 8 and 17 (spanning 9 versions)
Revision 8 as of 2008-07-09 08:32:11
Size: 4371
Editor: OndrejCertik
Comment:
Revision 17 as of 2022-04-05 00:44:02
Size: 0
Editor: mkoeppe
Comment: outdated
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= How to run Sage in a systemwide Python =

== Easy Way ==

Create this `s.py` python script:
{{{
import os
import re
import sys

def set_paths(root="/home/ondra/ext/sage"):
    """
    Set paths necessary to import sage.

    root ... the path to your Sage installation
    """
    python_path = [
        root+"/local/lib/python",
        root+"/local/lib/python2.5/lib-dynload",
        root+"/local/lib/python2.5/site-packages",
            ]
    sys.path = python_path + sys.path

    paths = {
            "SAGE_ROOT": root,
            "SAGE_LOCAL": root+"/local",
            "DOT_SAGE": "~/.sage/",
            "SAGE_SERVER": "http://www.sagemath.org/",
            "PATH": root+"/local/bin:"+os.environ["PATH"],
            }
    os.environ.update(paths)

def import_sageall():
    """
    Imports sage by "import sage.all".

    If it fails, write a helpful message and exit. After executing this method,
    you can be sure that sage just works, e.g you can do

    from sage.all import something

    without worrying.
    """
    try:
        import sage.all
    except ImportError, e:
        if re.match("(.*).so: cannot open shared object file: No such file or directory", e.message):
            # all seems to be just a LD_LIBRARY_PATH problem in 99% of cases
            print """\
"import sage.all" failed when importing an .so library, this is most probably
an LD_LIBRARY_PATH problem, please set your LD_LIBRARY_PATH and try again, e.g. execute:
LD_LIBRARY_PATH=%s/local/lib python %s""" % (os.environ.get("SAGE_ROOT", ""),
        sys.argv[0])
            sys.exit()
        else:
            # some other problem
            raise

set_paths()
import_sageall()

from sage.all import *
var("x")
e = x**2/3-log(x)
print e
print integrate(e, x)
}}}
and try to run it:
{{{
$ python s.py
"import sage.all" failed when importing an .so library, this is most probably
an LD_LIBRARY_PATH problem, please set your LD_LIBRARY_PATH and try again, e.g. execute:
LD_LIBRARY_PATH=/home/ondra/ext/sage/local/lib python s.py
}}}
it tells you the exact command that you need to execute to make it work, so do it:
{{{
$ LD_LIBRARY_PATH=/home/ondra/ext/sage/local/lib python s.py

                                   2
                                  x
                                  -- - log(x)
                                  3

                                            3
                                           x
                              - x log(x) + -- + x
                                           9
}}}
So as you can see from the above, all you have to do is to set the `root` keyword parameter in the script to point to your Sage installation and that's it. The script will tell you the correct command to run itself.


== Robust Way ==

Create the `run_sage` bash script:
{{{
#! /bin/bash

export SAGE_ROOT=/home/ondra/ext/sage

export SAGE_LOCAL=$SAGE_ROOT/local
export DOT_SAGE=~/.sage/
export PATH=$SAGE_ROOT/local/bin:$PATH

export LD_LIBRARY_PATH="$SAGE_ROOT/local/lib/openmpi:$SAGE_ROOT/local/lib/:"

export PYTHONPATH="$SAGE_ROOT/local/bin:$SAGE_ROOT/local/lib/python2.5/site-packages/setuptools-0.6c8-py2.5.egg:$SAGE_ROOT/local/lib/python2.5/site-packages/SQLAlchemy-0.4.3-py2.5.egg:$SAGE_ROOT/local/bin:$SAGE_ROOT/local/lib/python:$SAGE_ROOT/local/lib/python25.zip:$SAGE_ROOT/local/lib/python2.5/plat-linux2:$SAGE_ROOT/local/lib/python2.5/lib-tk:$SAGE_ROOT/local/lib/python2.5/lib-dynload:$SAGE_ROOT/local/lib/python2.5/site-packages:$SAGE_ROOT/local/lib/python2.5/site-packages/IPython/Extensions"

ipython
}}}
Then:
{{{
$ ./run_sage
Python 2.5.1 (r251:54863, Mar 29 2008, 09:29:46)
Type "copyright", "credits" or "license" for more information.

IPython 0.8.1 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.

In [1]: from sage.all import *
Falling back to a hard coded sage server in misc/hg.py

In [2]: var("x")
Out[2]: x

In [3]: x**2/4 + log(x)
Out[3]: log(x) + x^2/4
}}}