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.