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.

Reply via email to