spyder-ide / spyder

Official repository for Spyder - The Scientific Python Development Environment
https://www.spyder-ide.org
MIT License
8.22k stars 1.59k forks source link

Content in ipython startup files are not loaded in debug mode. #21422

Open Miguel-LlamasLanza opened 11 months ago

Miguel-LlamasLanza commented 11 months ago

Issue Report Checklist

Problem Description

I have some import commands and functions in the .ipython/profile_default/startup directory. They are normally loaded in the spyder ipython console, except when I use debug mode. Is this expected behavior/ I think it would be great to have those function loaded, or at least be able to enable it in the settings (maybe there is a way to do it that I do not know about (?))

What steps reproduce the problem?

  1. Create a file import.py inside the .ipython/profile_default/startup
  2. Start debug mode in spyder.
  3. Call any package imported or function defined in the import.py script

What is the expected output? What do you see instead?

The console returns that it does not recognize the command given (the function or package).


## Versions
<!--- You can get this information from Help > About Spyder...
or (if Spyder won't launch) the "conda list" command
from the Anaconda Prompt/Terminal/command line. --->

* Spyder version: 5.4.3  (conda)
* Python version: 3.10.11 64-bit
* Qt version: 5.15.2
* PyQt5 version: 5.15.7
* Operating System: Linux 5.19.0-32-generic

### Dependencies
<!--- Please go to the menu entry Help > Dependencies,
press the Copy to clipboard button and paste below --->

Mandatory:

atomicwrites >=1.2.0 : 1.4.1 (OK) chardet >=2.0.0 : 4.0.0 (OK) cloudpickle >=0.5.0 : 2.2.1 (OK) cookiecutter >=1.6.0 : 2.1.1 (OK) diff_match_patch >=20181111 : 20230430 (OK) intervaltree >=3.0.2 : 3.1.0 (OK) IPython >=7.31.1,<9.0.0,!=8.8.0,!=8.9.0,!=8.10.0 : 8.14.0 (OK) jedi >=0.17.2,<0.19.0 : 0.18.2 (OK) jellyfish >=0.7 : 0.9.0 (OK) jsonschema >=3.2.0 : 4.17.3 (OK) keyring >=17.0.0 : 23.13.1 (OK) nbconvert >=4.0 : 7.5.0 (OK) numpydoc >=0.6.0 : 1.5.0 (OK) parso >=0.7.0,<0.9.0 : 0.8.3 (OK) pexpect >=4.4.0 : 4.8.0 (OK) pickleshare >=0.4 : 0.7.5 (OK) psutil >=5.3 : 5.9.0 (OK) pygments >=2.0 : 2.15.1 (OK) pylint >=2.5.0,<3.0 : 2.17.4 (OK) pylint_venv >=2.1.1 : 3.0.2 (OK) pyls_spyder >=0.4.0 : 0.4.0 (OK) pylsp >=1.7.2,<1.8.0 : 1.7.3 (OK) pylsp_black >=1.2.0 : 1.3.0 (OK) qdarkstyle >=3.0.2,<3.2.0 : 3.1 (OK) qstylizer >=0.2.2 : 0.2.2 (OK) qtawesome >=1.2.1 : 1.2.3 (OK) qtconsole >=5.4.2,<5.5.0 : 5.4.3 (OK) qtpy >=2.1.0 : 2.3.1 (OK) rtree >=0.9.7 : 1.0.1 (OK) setuptools >=49.6.0 : 67.8.0 (OK) sphinx >=0.6.6 : 7.0.1 (OK) spyder_kernels >=2.4.3,<2.5.0 : 2.4.3 (OK) textdistance >=4.2.0 : 4.5.0 (OK) three_merge >=0.1.1 : 0.1.1 (OK) watchdog >=0.10.3 : 3.0.0 (OK) xdg >=0.26 : 0.28 (OK) zmq >=22.1.0 : 25.1.0 (OK)

Optional:

cython >=0.21 : 0.29.35 (OK) matplotlib >=3.0.0 : 3.7.1 (OK) numpy >=1.7 : 1.23.5 (OK) pandas >=1.1.1 : 1.5.3 (OK) scipy >=0.17.0 : 1.10.1 (OK) sympy >=0.7.3 : 1.11.1 (OK)

Spyder plugins:

spyder_line_profiler.spyder.plugin 0.3.1 : 0.3.1 (OK) spyder_notebook.notebookplugin 0.4.1 : 0.4.1 (OK)

dalthviz commented 11 months ago

Hi @Miguel-LlamasLanza thank you for the feedback! I think you could achieve that by using the current_namespace kwarg of the debugfile function (the function call that gets executed in the IPython console when you debug). For that you will need to run a manually modified debugfile call in the IPython console. So something like:

debugfile('<path to your file>', wdir='<path to the working directory dir>', current_namespace=True)

A preview of the workaround:

namespaces_debug

Thinking about this, seems to me that this is/should be a preference? What do you think @ccordoba12? I remember being able to set things to run using the console current namespace but maybe that only has been working for normal file runs and not on debug runs?

ccordoba12 commented 11 months ago

Thinking about this, seems to me that this is/should be a preference? What do you think @ccordoba12? I remember being able to set things to run using the console current namespace but maybe that only has been working for normal file runs and not on debug runs?

Well, if you go to the menu

Run > Configuration per file

and then select Run file with custom configuration and Run in console's namespace instead of an empty one

image

Spyder will set current_namespace=True in debugfile:

image

ccordoba12 commented 11 months ago

And about what @Miguel-LlamasLanza said:

I have some import commands and functions in the .ipython/profile_default/startup directory. They are normally loaded in the spyder ipython console, except when I use debug mode. Is this expected behavior

Yes, it is. We don't load files in that directory while debugging.

I think it would be great to have those function loaded, or at least be able to enable it in the settings (maybe there is a way to do it that I do not know about (?))

It probably is but we don't have time to do implement right now, sorry. So for now you can follow @dalthviz's advice about starting the debugger in the console's namespace

Or you could use a simpler solution to what you want, which is setting the lines you'd like to run in the debugger preferences:

image

Miguel-LlamasLanza commented 11 months ago

Thank you @dalthviz and @ccordoba12 for your answers. Both workarounds work fine, I personally prefer the option of putting all my lines in the debugger preferences (i.e. copying what I have in the .ipython/profile_default/startup/import.py file in there). It works even if I am defining functions there (I did not need to separate each line with semicolon, and it still worked)