SageMath Installation error
Hello all, I am using Linux Mint 19.3 and installed SageMath 9.0 from the source. I am not sure what is going on , I even did the
sudo chown -R root:root ./SageMath
sudo ln -s /opt/SageMath/sage /usr/local/bin
sage
commands. I attached the error below. I apologize for the error being long, but I am not sure what any of this means. Thank you for all the help.
sage
mkdir: cannot create directory ‘/home/luis/.sage//R’: Permission denied
/opt/SageMath/src/bin/sage-env: line 469: /home/luis/.sage//R/Makevars.user: No such file or directory
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 9.0, Release Date: 2020-01-01 │
│ Using Python 3.7.3. Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
/opt/SageMath/local/lib/python3.7/site-packages/IPython/paths.py:69: UserWarning: IPython parent '/home/luis/.sage' is not a writable location, using a temp directory.
" using a temp directory.".format(parent))
---------------------------------------------------------------------------
---------------------------------------------------------------------------
PermissionError Python 3.7.3: /opt/SageMath/local/bin/python3
Sat Feb 15 11:27:43 2020
A problem occurred executing Python code. Here is the sequence of function
calls leading up to the error, with the most recent (innermost) call last.
/opt/SageMath/src/bin/sage-ipython in <module>()
1 #!/usr/bin/env sage-python
2 # -*- coding: utf-8 -*-
3 """
4 Sage IPython startup script.
5 """
6
7 # Display startup banner. Do this before anything else to give the user
8 # early feedback that Sage is starting.
9 from sage.misc.banner import banner
10 banner()
11
12 from sage.repl.interpreter import SageTerminalApp
13
14 app = SageTerminalApp.instance()
---> 15 app.initialize()
global app.initialize = <bound method TerminalIPythonApp.initialize of <sage.repl.interpreter.SageTerminalApp object at 0x7fbcdd2c5278>>
16 app.start()
</opt/SageMath/local/lib/python3.7/site-packages/decorator.py:decorator-gen-110> in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None)
/opt/SageMath/local/lib/python3.7/site-packages/traitlets/config/application.py in catch_config_error(method=<function TerminalIPythonApp.initialize>, app=<sage.repl.interpreter.SageTerminalApp object>, *args=(None,), **kwargs={})
72 TRAITLETS_APPLICATION_RAISE_CONFIG_FILE_ERROR = False
73 else:
74 raise ValueError("Unsupported value for environment variable: 'TRAITLETS_APPLICATION_RAISE_CONFIG_FILE_ERROR' is set to '%s' which is none of {'0', '1', 'false', 'true', ''}."% _envvar )
75
76
77 @decorator
78 def catch_config_error(method, app, *args, **kwargs):
79 """Method decorator for catching invalid config (Trait/ArgumentErrors) during init.
80
81 On a TraitError (generally caused by bad config), this will print the trait's
82 message, and exit the app.
83
84 For use on init methods, to prevent invoking excepthook on invalid input.
85 """
86 try:
---> 87 return method(app, *args, **kwargs)
method = <function TerminalIPythonApp.initialize at 0x7fbcd64aa378>
app = <sage.repl.interpreter.SageTerminalApp object at 0x7fbcdd2c5278>
args = (None,)
kwargs = {}
88 except (TraitError, ArgumentError) as e:
89 app.print_help()
90 app.log.fatal("Bad config encountered during initialization:")
91 app.log.fatal(str(e))
92 app.log.debug("Config at the time: %s", app.config)
93 app.exit(1)
94
95
96 class ApplicationError(Exception):
97 pass
98
99
100 class LevelFormatter(logging.Formatter):
101 """Formatter with additional `highlevel` record
102
/opt/SageMath/local/lib/python3.7/site-packages/IPython/terminal/ipapp.py in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None)
301
302 return super(TerminalIPythonApp, self).parse_command_line(argv)
303
304 @catch_config_error
305 def initialize(self, argv=None):
306 """Do actions after construct, but before starting the app."""
307 super(TerminalIPythonApp, self).initialize(argv)
308 if self.subapp is not None:
309 # don't bother initializing further, starting subapp
310 return
311 # print self.extra_args
312 if self.extra_args and not self.something_to_run:
313 self.file_to_run = self.extra_args[0]
314 self.init_path()
315 # create the shell
--> 316 self.init_shell()
self.init_shell = <bound method SageTerminalApp.init_shell of <sage.repl.interpreter.SageTerminalApp object at 0x7fbcdd2c5278>>
317 # and draw the banner
318 self.init_banner()
319 # Now a variety of things that happen after the banner is printed.
320 self.init_gui_pylab()
321 self.init_extensions()
322 self.init_code()
323
324 def init_shell(self):
325 """initialize the InteractiveShell instance"""
326 # Create an InteractiveShell instance.
327 # shell.display_banner should always be False for the terminal
328 # based app, because we call shell.show_banner() by hand below
329 # so the banner shows *before* all extension loading stuff.
330 self.shell = self.interactive_shell_class.instance(parent=self,
331 profile_dir=self.profile_dir,
/opt/SageMath/local/lib/python3.7/site-packages/sage/repl/interpreter.py in init_shell(self=<sage.repl.interpreter.SageTerminalApp object>)
755 This code is based on
756 :meth:`TerminalIPythonApp.init_shell`.
757
758 EXAMPLES::
759
760 sage: from sage.repl.interpreter import SageTerminalApp
761 sage: app = SageTerminalApp.instance()
762 sage: app.shell
763 <sage.repl.interpreter.SageTestShell object at 0x...>
764 """
765 # Shell initialization
766 self.shell = self.shell_class.instance(
767 parent=self,
768 config=self.config,
769 profile_dir=self.profile_dir,
--> 770 ipython_dir=self.ipython_dir)
global ipython_dir = undefined
self.ipython_dir = '/tmp/tmpockv4tsi'
771 self.shell.configurables.append(self)
772 self.shell.has_sage_extensions = SAGE_EXTENSION in self.extensions
773
774 # Load the %lprun extension if available
775 try:
776 import line_profiler
777 except ImportError:
778 pass
779 else:
780 self.extensions.append('line_profiler')
781
782 if self.shell.has_sage_extensions:
783 self.extensions.remove(SAGE_EXTENSION)
784
785 # load sage extension here to get a crash if
/opt/SageMath/local/lib/python3.7/site-packages/traitlets/config/configurable.py in instance(cls=<class 'sage.repl.interpreter.SageTerminalInteractiveShell'>, *args=(), **kwargs={'config': {'TerminalIPythonApp': {'display_banner': False,...']}, 'SageTerminalApp': {'force_interact': True}}, 'ipython_dir': '/tmp/tmpockv4tsi', 'parent': <sage.repl.interpreter.SageTerminalApp object>, 'profile_dir': <IPython.core.profiledir.ProfileDir object>})
397 >>> class Foo(SingletonConfigurable): pass
398 >>> foo = Foo.instance()
399 >>> foo == Foo.instance()
400 True
401
402 Create a subclass that is retrived using the base class instance::
403
404 >>> class Bar(SingletonConfigurable): pass
405 >>> class Bam(Bar): pass
406 >>> bam = Bam.instance()
407 >>> bam == Bar.instance()
408 True
409 """
410 # Create and save the instance
411 if cls._instance is None:
--> 412 inst = cls(*args, **kwargs)
inst = undefined
cls = <class 'sage.repl.interpreter.SageTerminalInteractiveShell'>
args = ()
kwargs = {'parent': <sage.repl.interpreter.SageTerminalApp object at 0x7fbcdd2c5278>, 'config': {'TerminalIPythonApp': {'display_banner': False, 'verbose_crash': True, 'test_shell': False, 'shell_class': <class 'sage.repl.interpreter.SageTerminalInteractiveShell'>}, 'InteractiveShell': {'prompts_class': <class 'sage.repl.prompts.SagePrompts'>, 'ast_node_interactivity': 'all', 'colors': 'LightBG', 'simple_prompt': False, 'term_title': True, 'confirm_exit': False, 'separate_in': ''}, 'TerminalInteractiveShell': {'prompts_class': <class 'sage.repl.prompts.SagePrompts'>, 'ast_node_interactivity': 'all', 'colors': 'LightBG', 'simple_prompt': False, 'term_title': True, 'confirm_exit': False, 'separate_in': ''}, 'InteractiveShellApp': {'extensions': ['sage']}, 'SageTerminalApp': {'force_interact': True}}, 'profile_dir': <IPython.core.profiledir.ProfileDir object at 0x7fbcd64492e8>, 'ipython_dir': '/tmp/tmpockv4tsi'}
413 # Now make sure that the instance will also be returned by
414 # parent classes' _instance attribute.
415 for subclass in cls._walk_mro():
416 subclass._instance = inst
417
418 if isinstance(cls._instance, cls):
419 return cls._instance
420 else:
421 raise MultipleInstanceError(
422 'Multiple incompatible subclass instances of '
423 '%s are being created.' % cls.__name__
424 )
425
426 @classmethod
427 def initialized(cls):
/opt/SageMath/local/lib/python3.7/site-packages/IPython/terminal/interactiveshell.py in __init__(self=<sage.repl.interpreter.SageTerminalInteractiveShell object>, *args=(), **kwargs={'config': {'TerminalIPythonApp': {'display_banner': False,...']}, 'SageTerminalApp': {'force_interact': True}}, 'ipython_dir': '/tmp/tmpockv4tsi', 'parent': <sage.repl.interpreter.SageTerminalApp object>, 'profile_dir': <IPython.core.profiledir.ProfileDir object>})
425
426 def init_alias(self):
427 # The parent class defines aliases that can be safely used with any
428 # frontend.
429 super(TerminalInteractiveShell, self).init_alias()
430
431 # Now define aliases that only make sense on the terminal, because they
432 # need direct access to the console in a way that we can't emulate in
433 # GUI or web frontend
434 if os.name == 'posix':
435 for cmd in ['clear', 'more', 'less', 'man']:
436 self.alias_manager.soft_define_alias(cmd, cmd)
437
438
439 def __init__(self, *args, **kwargs):
--> 440 super(TerminalInteractiveShell, self).__init__(*args, **kwargs)
global super = undefined
global TerminalInteractiveShell = <class 'IPython.terminal.interactiveshell.TerminalInteractiveShell'>
self.__init__ = <bound method TerminalInteractiveShell.__init__ of <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fbcdd3a6cc0>>
args = ()
kwargs = {'parent': <sage.repl.interpreter.SageTerminalApp object at 0x7fbcdd2c5278>, 'config': {'TerminalIPythonApp': {'display_banner': False, 'verbose_crash': True, 'test_shell': False, 'shell_class': <class 'sage.repl.interpreter.SageTerminalInteractiveShell'>}, 'InteractiveShell': {'prompts_class': <class 'sage.repl.prompts.SagePrompts'>, 'ast_node_interactivity': 'all', 'colors': 'LightBG', 'simple_prompt': False, 'term_title': True, 'confirm_exit': False, 'separate_in': ''}, 'TerminalInteractiveShell': {'prompts_class': <class 'sage.repl.prompts.SagePrompts'>, 'ast_node_interactivity': 'all', 'colors': 'LightBG', 'simple_prompt': False, 'term_title': True, 'confirm_exit': False, 'separate_in': ''}, 'InteractiveShellApp': {'extensions': ['sage']}, 'SageTerminalApp': {'force_interact': True}}, 'profile_dir': <IPython.core.profiledir.ProfileDir object at 0x7fbcd64492e8>, 'ipython_dir': '/tmp/tmpockv4tsi'}
441 self.init_prompt_toolkit_cli()
442 self.init_term_title()
443 self.keep_running = True
444
445 self.debugger_history = InMemoryHistory()
446
447 def ask_exit(self):
448 self.keep_running = False
449
450 rl_next_input = None
451
452 def pre_prompt(self):
453 if self.rl_next_input:
454 # We can't set the buffer here, because it will be reset just after
455 # this. Adding a callable to pre_run_callables does what we need
/opt/SageMath/local/lib/python3.7/site-packages/IPython/core/interactiveshell.py in __init__(self=<sage.repl.interpreter.SageTerminalInteractiveShell object>, ipython_dir='/tmp/tmpockv4tsi', profile_dir=<IPython.core.profiledir.ProfileDir object>, user_module=None, user_ns=None, custom_exceptions=((), None), **kwargs={'config': {'TerminalIPythonApp': {'display_banner': False,...']}, 'SageTerminalApp': {'force_interact': True}}, 'parent': <sage.repl.interpreter.SageTerminalApp object>})
488 self.init_builtins()
489
490 # The following was in post_config_initialization
491 self.init_inspector()
492 if py3compat.PY3:
493 self.raw_input_original = input
494 else:
495 self.raw_input_original = raw_input
496 self.init_completer()
497 # TODO: init_io() needs to happen before init_traceback handlers
498 # because the traceback handlers hardcode the stdout/stderr streams.
499 # This logic in in debugger.Pdb and should eventually be changed.
500 self.init_io()
501 self.init_traceback_handlers(custom_exceptions)
502 self.init_prompts()
--> 503 self.init_display_formatter()
self.init_display_formatter = <bound method SageTerminalInteractiveShell.init_display_formatter of <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fbcdd3a6cc0>>
504 self.init_display_pub()
505 self.init_data_pub()
506 self.init_displayhook()
507 self.init_magics()
508 self.init_alias()
509 self.init_logstart()
510 self.init_pdb()
511 self.init_extension_manager()
512 self.init_payload()
513 self.init_deprecation_warnings()
514 self.hooks.late_startup_hook()
515 self.events.trigger('shell_initialized', self)
516 atexit.register(self.atexit_operations)
517
518 def get_ipython(self):
/opt/SageMath/local/lib/python3.7/site-packages/sage/repl/interpreter.py in init_display_formatter(self=<sage.repl.interpreter.SageTerminalInteractiveShell object>)
242
243 sage: from sage.repl.interpreter import SageTerminalInteractiveShell
244 sage: SageTerminalInteractiveShell() # not tested
245 <sage.repl.interpreter.SageNotebookInteractiveShell object at 0x...>
246 """
247
248 def init_display_formatter(self):
249 """
250 Switch to the Sage IPython commandline rich output backend
251
252 EXAMPLES::
253
254 sage: from sage.repl.interpreter import SageTerminalInteractiveShell
255 sage: SageTerminalInteractiveShell().init_display_formatter() # not tested
256 """
--> 257 from sage.repl.rich_output.backend_ipython import BackendIPythonCommandline
global sage.repl.rich_output.backend_ipython = undefined
BackendIPythonCommandline = undefined
258 backend = BackendIPythonCommandline()
259 backend.get_display_manager().switch_backend(backend, shell=self)
260
261
262 class SageTestShell(SageShellOverride, TerminalInteractiveShell):
263 """
264 Test Shell
265
266 Care must be taken in these doctests to quit the test shell in
267 order to switch back the rich output display backend to the
268 doctest backend.
269
270 EXAMPLES::
271
272 sage: from sage.repl.interpreter import get_test_shell
/opt/SageMath/local/lib/python3.7/site-packages/sage/repl/rich_output/__init__.py in <module>()
1 # -*- encoding: utf-8 -*-
2
----> 3 from .display_manager import get_display_manager
global display_manager = undefined
global get_display_manager = undefined
4 from .pretty_print import pretty_print
5
6
/opt/SageMath/local/lib/python3.7/site-packages/sage/repl/rich_output/display_manager.py in <module>()
24 The Sage display manager using the doctest backend
25 """
26
27 # ****************************************************************************
28 # Copyright (C) 2015 Volker Braun ;
29 #
30 # Distributed under the terms of the GNU General Public License (GPL)
31 # as published by the Free Software Foundation; either version 2 of
32 # the License, or (at your option) any later version.
33 #
34 # ****************************************************************************
35
36
37 import warnings
38
---> 39 from sage.structure.sage_object import SageObject
global sage.structure.sage_object = undefined
global SageObject = undefined
40 from sage.repl.rich_output.output_basic import (
41 OutputPlainText, OutputAsciiArt, OutputUnicodeArt, OutputLatex,
42 )
43 from sage.repl.rich_output.preferences import DisplayPreferences
44
45
46 class DisplayException(Exception):
47 """
48 Base exception for all rich output-related exceptions.
49
50 EXAMPLES::
51
52 sage: from sage.repl.rich_output.display_manager import DisplayException
53 sage: raise DisplayException('foo')
54 Traceback (most recent call last):
/opt/SageMath/local/lib/python3.7/site-packages/sage/structure/__init__.py in <module>()
1 # Resolve a cyclic import
----> 2 import sage.structure.element
global sage.structure.element = undefined
/opt/SageMath/local/lib/python3.7/site-packages/sage/structure/element.pyx in init sage.structure.element (build/cythonized/sage/structure/element.c:33434)()
----> 1 r"""
2 Elements
3
4 AUTHORS:
5
6 - David Harvey (2006-10-16): changed CommutativeAlgebraElement to
7 derive from CommutativeRingElement instead of AlgebraElement
8
9 - David Harvey (2006-10-29): implementation and documentation of new
10 arithmetic architecture
11
12 - William Stein (2006-11): arithmetic architecture -- pushing it
13 through to completion.
14
15 - Gonzalo Tornaria (2007-06): recursive base extend for coercion --
16 lots of tests
17
18 - Robert Bradshaw (2007-2010): arithmetic operators and coercion
19
20 - Maarten Derickx (2010-07): added architecture for is_square and sqrt
21
22 - Jeroen Demeyer (2016-08): moved all coercion to the base class
23 :class:`Element`, see :trac:`20767`
24
25 The Abstract Element Class Hierarchy
26 ====================================
27
28 This is the abstract class hierarchy, i.e., these are all
29 abstract base classes.
30
31 ::
/opt/SageMath/local/lib/python3.7/site-packages/sage/structure/sage_object.pyx in init sage.structure.sage_object (build/cythonized/sage/structure/sage_object.c:11573)()
1 # -*- encoding: utf-8 -*-
2 r"""
3 Abstract base class for Sage objects
4 """
5
----> 6 from sage.misc.persist import (_base_dumps, _base_save,
global sage.misc.persist = undefined
global _base_dumps = undefined
global _base_save = undefined
global register_unpickle_override = undefined
global make_None = undefined
7 register_unpickle_override, make_None)
8
9 from sage.misc.lazy_import import LazyImport
10
11 # NOTE: These imports are just for backwards-compatibility
12 loads = LazyImport('sage.misc.persist', 'loads', deprecation=25153)
13 dumps = LazyImport('sage.misc.persist', 'dumps', deprecation=25153)
14 save = LazyImport('sage.misc.persist', 'save', deprecation=25153)
15 load = LazyImport('sage.misc.persist', 'load', deprecation=25153)
16 unpickle_all = LazyImport('sage.misc.persist', 'unpickle_all',
17 deprecation=25153)
18 unpickle_global = LazyImport('sage.misc.persist', 'unpickle_global',
19 deprecation=25153)
20 unpickle_override = LazyImport('sage.misc.persist', 'unpickle_override',
21 deprecation=25153)
22
23
24 # Generators is no longer used (#21382)
25 register_unpickle_override('sage.structure.generators', 'make_list_gens',
26 make_None)
27
28
29 __all__ = ['SageObject']
30
31
/opt/SageMath/local/lib/python3.7/site-packages/sage/misc/persist.pyx in init sage.misc.persist (build/cythonized/sage/misc/persist.c:11825)()
28 """
29
30 import io
31 import os
32 import sys
33
34 from textwrap import dedent
35
36 # change to import zlib to use zlib instead; but this
37 # slows down loading any data stored in the other format
38 import zlib; comp = zlib
39 import bz2; comp_other = bz2
40
41 from six.moves import cPickle as pickle
42
---> 43 from .misc import SAGE_DB
global misc = undefined
global SAGE_DB = undefined
44 from .sage_unittest import TestSuite
45
46
47 cdef _normalize_filename(s):
48 """
49 Append the .sobj extension to a filename if it doesn't already have it.
50 """
51 if s[-5:] != '.sobj':
52 return s + '.sobj'
53
54 return s
55
56
57 def load(*filename, compress=True, verbose=True, **kwargs):
58 r"""
/opt/SageMath/local/lib/python3.7/site-packages/sage/misc/misc.py in <module>()
99 # We do the following:
100 # 1. If there is no DOT_SAGE, we create it.
101 # 2. Check to see if the permissions on DOT_SAGE are
102 # sufficiently restrictive. If not, we change them.
103
104 sage_makedirs(DOT_SAGE)
105
106 if hasattr(os, 'chmod'):
107 _mode = os.stat(DOT_SAGE)[stat.ST_MODE]
108 _desired_mode = 0o40700 # drwx------
109 if _mode != _desired_mode:
110 # On Cygwin, if the sage directory is not in a filesystem mounted with
111 # 'acl' support, setting the permissions may fail silently, so only
112 # print the message after we've changed the permissions and confirmed
113 # that the change succeeded
--> 114 os.chmod(DOT_SAGE, _desired_mode)
global os.chmod = <built-in function chmod>
global DOT_SAGE = '/home/luis/.sage/'
global _desired_mode = 16832
115 if os.stat(DOT_SAGE)[stat.ST_MODE] == _desired_mode:
116 print("Setting permissions of DOT_SAGE directory so only you "
117 "can read and write it.")
118
119
120 def try_read(obj, splitlines=False):
121 r"""
122 Determine if a given object is a readable file-like object and if so
123 read and return its contents.
124
125 That is, the object has a callable method named ``read()`` which takes
126 no arguments (except ``self``) then the method is executed and the
127 contents are returned.
128
129 Alternatively, if the ``splitlines=True`` is given, first ``splitlines()``
PermissionError: [Errno 1] Operation not permitted: '/home/luis/.sage/'
**********************************************************************
Oops, Sage crashed. We do our best to make it stable, but...
A crash report was automatically generated with the following information:
- A verbatim copy of the crash traceback.
- A copy of your input history during this session.
- Data on your current Sage configuration.
It was left in the file named:
'/tmp/tmpockv4tsi/Sage_crash_report.txt'
If you can email this file to the developers, the information in it will help
them in understanding and correcting the problem.
You can mail it to: sage-support at
with the subject 'Sage Crash Report'.
If you want to do it now, the following command will work (under Unix):
mail -s 'Sage Crash Report'
In your email, please also include information about:
- The operating system under which the crash happened: Linux, macOS, Windows,
other, and which exact version (for example: Ubuntu 16.04.3, macOS 10.13.2,
Windows 10 Pro), and whether it is 32-bit or 64-bit;
- How Sage was installed: using pip or conda, from GitHub, as part of
a Docker container, or other, providing more detail if possible;
- How to reproduce the crash: what exact sequence of instructions can one
input to get the same crash? Ideally, find a minimal yet complete sequence
of instructions that yields the crash.
To ensure accurate tracking of this issue, please file a report about it at:
Hit <Enter> to quit (your terminal may close):
The problem seems that sage created a repository with wrong permissions. Could you post the output of the command
This will show the permission on the repository `/home/luis/.sage/ where Sage is supposed to save things such as the command line history.
Do you happen to have started Sage as root? (ie something like
sudo sage) That might explain the problem.