Ask Your Question

from sage.all import * results in "cannot open shared object file" error

asked 2011-11-10 18:58:33 +0200

jthetzel gravatar image

I am having a problem importing sage modules into an instance of python 2.7. I succesfully untared the release binary tarball for 64-bit Ubuntu 10.04 ( ) into ~/sage. I can succesfully run sage with ./sage.

After opening the python console (python), I set the relevant environmental variables and system path:

import sys
import os
os.environ['LD_LIBRARY_PATH'] = '/home/jthetzel/sage/local/lib'
os.environ['SAGE_ROOT'] = '/home/jthetzel/sage'

However, the following:

from sage.all import *

Results in:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/jthetzel/sage/local/lib/python/site-packages/sage/", line 63, in <module>
    from sage.ext.c_lib import _init_csage, sig_on_count
ImportError: cannot open shared object file: No such file or directory

The same occurs when I try different system paths, such as /home/jthetzel/sage/local/lib or /home/jthetzel/sage .

Trying locate finds:


I have read elsewhere that ./sage -b might fix this error, but it does not in my case.

Could anyone help shed light on why can not be found? I am trying to import the sage modules into my usual python as opposed to Sage's python (./sage -python) because I am eventually trying to access Sage through R's Jython interface, rJython. I appreciate any guidance.

edit retag flag offensive close merge delete



Rather than trying to set the environment variables by hand, try running "sage -sh". Then open python and see if you can do "from sage.all import *". ("sage -sh" opens up a "Sage shell" in which all relevant environment variables have been set, hopefully correctly.) If this works, you can look at the settings for the environment variables in the script SAGE_ROOT/local/bin/sage-env. (It is also possible that Sage's python has been modified and what you're trying won't work with the system python.)

John Palmieri gravatar imageJohn Palmieri ( 2011-11-11 10:37:49 +0200 )edit

@John Palmieri: Thanks, this was a very helpful suggestion.

jthetzel gravatar imagejthetzel ( 2011-11-15 11:13:13 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2011-11-12 10:42:40 +0200

William Stein gravatar image

What you're trying to do is in no way supported and should not work. You can't import Sage into any "random python" on your system, even with the PATHs setup. For starters the version of Python differs from the one where Sage was built, which should cause trouble. But that is just the beginning. You can do this (use the Sage Python):

deep:sage wstein$ ./sage -python
Python 2.6.4 (r264:75706, Nov 10 2011, 11:56:29) 
>>> from sage.all import *

Also, Sage is likely to rely on modules not installed in your other Python. If there is any chance of what you're doing working by accident (and don't expect Sage to actually work well), this would be more likely to work:

$ sage -sh
$ /usr/bin/python
>>> import sys
>>> sys.path.append("/Users/wstein/Desktop/sage/local/lib/python/site-packages")
>>> import sage.all
ImportError: No module named _socket

If you have libraries in one copy of Python that you want to use with Sage, something you can try that might work is to start Sage's python and append to its sys.path the path of the other Python. I.e., do the exact opposite of what you're trying above.

edit flag offensive delete link more


@William Stein: Thanks for the clear explanation. My motive was to find a quick and easy way to call Sage from within R (I understand the other way round works fine) by importing the Sage modules into Jython, which I could then interface using the rJython package. Quick and easy seems not the solution this time.

jthetzel gravatar imagejthetzel ( 2011-11-15 11:40:36 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2011-11-10 18:58:33 +0200

Seen: 1,736 times

Last updated: Nov 12 '11