I'm reviving this discussion because of another ask.sagemath.org post (https://ask.sagemath.org/question/63845/how-reach-octave-or-macaulay2-from-sage-notebook/): someone who had installed octave and macaulay 2, but the app wasn't finding them because of its minimal setting for PATH. This makes me think that a preference panel to set the PATH would be a good idea. As far as I can tell, the app still reads $HOME/.sage/init.sage, so people can use that instead of modifying an IPython profile function, right? But a small preference panel might be nice.
-- John On Friday, June 24, 2022 at 8:38:22 PM UTC-7 Marc Culler wrote: > I should have mentioned that it is always possible to run the main > executable of a macOS app from the command line. E.g. > > $ /Applications/SageMath.app/Contents/MacOS/SageMath > > When you do that, the process that is launched is almost identical to the > one that is launched when you click on the icon, the difference being that > it does have a stdout and stderr. So if you launch the app that way from > your terminal then you will be able to see any messages that are being > written to stderr. (This is one of those situations for which a terminal > is an optimal tool.) > > - Marc > > > > On Fri, Jun 24, 2022 at 10:28 PM Marc Culler <marc....@gmail.com> wrote: > >> Hi John, >> >> A macOS app launched from an icon has no stdout or stderr. Apple's NSLog >> command will write to stderr if it exists, and to a log file if it does not >> exist. But simply writing to stderr as most unix programs do has no effect >> if stderr does not exist. When using the terminal as the input for the >> sage app any stderr output generated by sage will go to the terminal. But >> there is no place for such error messages to go if they are generated >> before sage is launched. The /usr/local/bin/sage command is available as >> long as you install the recommended extra package, and anyone who is >> debugging should use it whenever necessary, as you did. >> >> I don't see any value in working hard to try to arrange that every >> possible thing can be done without ever using a terminal. There is nothing >> wrong with using a terminal. There are many tasks for which a terminal is >> the optimal tool. So be it. >> >> - Marc >> >> On Fri, Jun 24, 2022 at 10:01 PM John H Palmieri <jhpalm...@gmail.com> >> wrote: >> >>> Hi Marc, >>> >>> Very good question. I think that allowing users to modify the standard >>> config files is the right thing to do, but I'm really not sure. I worry >>> that the next person will want to modify a different setting, and you don't >>> want to get dragged into recreating IPython/Jupyter preferences. For >>> debugging, would it be worth providing a warning if a config file is found, >>> or if a config file is found with any nonstandard settings? (The default >>> config file is entirely commented out.) >>> >>> By the way, I debugged Samuel's suggestion by running "./sage -n" with a >>> local installation: it printed error messages in the terminal where I ran >>> it that let me know that something was wrong. I figured out that I had to >>> use quotes, as in >>> >>> c.InteractiveShellApp.exec_lines = ['import sys; ...'] >>> >>> rather than >>> >>> c.InteractiveShellApp.exec_lines = [import sys; ...] >>> >>> I don't know where to view the corresponding error messages for the OS X >>> app. >>> >>> A question for both of you: I think the standard situation is to not >>> have a profile directory, you have to run "sage --ipython profile create". >>> Is there a good way to do this instead from a Jupyter notebook? Then >>> someone could create a profile directory without having to use the >>> terminal, although they would need to use a text editor to modify it. >>> >>> -- >>> John >>> >>> On Friday, June 24, 2022 at 3:12:52 PM UTC-7 Marc Culler wrote: >>> >>>> Thank you for figuring that out Samuel. Now here is a question for >>>> both of you. The macOS app intentionally sets a minimal environment when >>>> it starts sage. It is intentionally minimal because it would be >>>> dangerous, >>>> in terms of security, but more importantly in terms of the potential for >>>> creating hard-to-debug crashes of the app, to simply accept whatever weird >>>> stuff the user happens to have in their environment. The decision to set >>>> a >>>> specific minimal environment for the app was made after such a crash, >>>> which >>>> was related to traces of an obsolete Sage installation left in a user's >>>> .bashrc file. >>>> >>>> But dangerous should not necessarily mean impossible. It would be >>>> feasible to add a preferences panel to the app which could include a PATH >>>> string to be appended to the minimal default PATH at startup. Being >>>> forced >>>> to type that string into a preferences dialog would at least alert the >>>> user >>>> to the possibility that the next weird crash might be their own fault. >>>> But >>>> Samuel's answer indicates that expert users can actually do this using a >>>> completely orthogonal preferences setting (one of millions, I suspect) >>>> namely editing an IPython config file hidden in the user's .sage >>>> directory. His answer shows that it is not impossible, just difficult. >>>> >>>> My question is whether Samuel's approach is better than providing a >>>> simple way to modify the PATH, and thereby inviing an unsophisticated user >>>> to make a big mess which could cripple the app. The esoteric knowledge >>>> needed to find and edit that config file provides a pretty good filter for >>>> ensuring that people who do this know what they are doing, or at least >>>> know >>>> that they are responsible for the consequences of making a mistake while >>>> doing it. Also, it is unclear to me how many users would actually want to >>>> use such a feature. Adding features that almost no one needs is not my >>>> idea of a good design approach. >>>> >>>> What do the two of you think? >>>> >>>> - Marc >>>> >>>> On Friday, June 24, 2022 at 2:08:17 PM UTC-5 John H Palmieri wrote: >>>> >>>>> Hi Samuel, >>>>> >>>>> Thank you for this. One thing: I made a mistake in my comments on >>>>> ask.sagemath.org. Changing sys.path changes the Python path, not the >>>>> path for executables. One option is to use >>>>> >>>>> import os; os.environ["PATH"] += ":/usr/local/bin" >>>>> >>>>> Any better ways to do this? Your pointer on how to include this into >>>>> IPython config files works, as long as the lines are in quotes: >>>>> >>>>> c.InteractiveShellApp.exec_lines = [ >>>>> 'import os; os.environ["PATH"] += ":/usr/local/bin" '] >>>>> >>>>> >>>>> >>>>> On Friday, June 24, 2022 at 10:09:39 AM UTC-7 slelievre wrote: >>>>> >>>>>> 2022-06-22 16:37:11 UTC, John H Palmieri: >>>>>> > >>>>>> > How do I set the PATH in the OS X Jupyter notebook, >>>>>> > if I'm using the 3-manifolds binary app? I mean, I know >>>>>> > how to do it in an individual notebook, but how do I set >>>>>> > the default PATH for every notebook? For example, >>>>>> > how do I add /usr/local/bin so that it's in the PATH >>>>>> > every time I open a new notebook? >>>>>> >>>>>> Hi John, >>>>>> >>>>>> Good job with your comments at >>>>>> >>>>>> - Ask Sage question 62873 >>>>>> https://ask.sagemath.org/question/62873 >>>>>> Animating plots in Jupyter/Sagemath >>>>>> >>>>>> Here is a possibility for the missing bit, after reading >>>>>> >>>>>> - discussion at [Stack Overflow question 34976803]( >>>>>> https://stackoverflow.com/q/34976803) >>>>>> - [Lucy Park: When Python imports but IPython does not]( >>>>>> https://www.lucypark.kr/blog/2013/02/10/when-python-imports-and-ipython-does-not/ >>>>>> ) >>>>>> >>>>>> To define some code to be run at the start of each >>>>>> Sage session, and/or each time the Sage Jupyter >>>>>> kernel starts, edit one or both of the files >>>>>> >>>>>> - `$HOME/.sage/ipython-5.0.0/profile_default/ipython_config.py` >>>>>> - `$HOME/.sage/ipython-5.0.0/profile_default/ipython_kernel_config.py` >>>>>> >>>>>> in which you should find a section like this: >>>>>> >>>>>> ## lines of code to run at IPython startup. >>>>>> # Default: [] >>>>>> # c.InteractiveShellApp.exec_lines = [] >>>>>> >>>>>> Uncomment the last line in that section and add >>>>>> any code to run. For example: >>>>>> >>>>>> ## lines of code to run at IPython startup. >>>>>> # Default: [] >>>>>> c.InteractiveShellApp.exec_lines = [ >>>>>> import sys; sys.path.append('/usr/local/bin') >>>>>> ] >>>>>> >>>>>> Feel free to consolidate your comments and this idea >>>>>> into an answer to the Ask Sage question. --Samuel >>>>>> >>>>>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "sage-support" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/sage-support/NiCkmMCEfd4/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> sage-support...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sage-support/cca085d1-7134-4297-b666-1877f86aec84n%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/sage-support/cca085d1-7134-4297-b666-1877f86aec84n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/1db0895f-9e63-4a9e-b5f6-b56c3e41fff9n%40googlegroups.com.