spyder icon indicating copy to clipboard operation
spyder copied to clipboard

Debug File (Ctrl+F5) does not respect working directory in Run configuration

Open roteiro opened this issue 5 months ago • 5 comments

Issue Report Checklist

  • [x] Searched the issues page for similar reports
  • [x] Read the relevant sections of the Spyder Troubleshooting Guide and followed its advice
  • [ ] Reproduced the issue after updating with conda update spyder (or pip, if not using Anaconda)
  • [ ] Could not reproduce inside jupyter qtconsole (if console-related)
  • [x] Tried basic troubleshooting (if a bug/error)
    • [x] Restarted Spyder
    • [x] Reset preferences with spyder --reset
    • [ ] Reinstalled the latest version of Anaconda
    • [x] Tried the other applicable steps from the Troubleshooting Guide
  • [x] Completed the Problem Description, Steps to Reproduce and Version sections below

Problem Description

Consider the following project structure of the folder testproject

.
├── .python-version
├── .spyproject
│   └── config
├── .venv
│   ├── .gitignore
│   ├── CACHEDIR.TAG
│   ├── Lib
│   ├── pyvenv.cfg
│   ├── Scripts
│   └── share
├── pyproject.toml
├── README.md
├── scripts
│   └── foo.py
└── uv.lock

The python interpreter is set to path/to/testproject/.venv/Scripts/python.exe. I want to run foo.py from the dir testproject , therefore, i set the following run configuration under Run->Configuration per File image

Content of foo.py

if __name__ == "__main__":
    print("test")
    raise ValueError

What steps reproduce the problem?

I tried two different ways of running the file: a) Run foo.py with F5 b) Debug foo.py with Ctrl+F5

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

a) I expect to to automatically enter the debugger due to the run configuration and the deliberate ValueError. This basically happens, except for the unexpected *** NameError: name '_pdbcmd_print_frame_status' is not defined

Full output of a)

In [1]: %runfile C:/Users/path/to/testproject/scripts/foo.py --wdir C:/Users/path/to/testproject/testproject --post-mortem
test
Traceback (most recent call last):

  File ~\path\to\testproject\.venv\Lib\site-packages\spyder_kernels\customize\utils.py:209 in exec_encapsulate_locals
    exec_fun(compile(code_ast, filename, "exec"), globals)

  File c:\users\path\to\testproject\testproject\scripts\foo.py:3
    raise ValueError

ValueError

****************************************
Entering post mortem debugging...
****************************************
*** NameError: name '_pdbcmd_print_frame_status' is not defined

IPdb [1]:

b) I expect the execution with the wdir set to the project root and the lauch of the debugger. However, the Working directory settings seem to be ignored for Ctrl+F5, since the working directory is changed to the folder scripts Full output of b)

In [3]: %debugfile C:/Users/path/to/testprojct/testproject/scripts/foo.py --wdir
*** NameError: name '_pdbcmd_print_frame_status' is not defined

IPdb [1]: 

Bonus Question

Is it correct that at the moment, there is no possibility to set the global run configuration such that the wdir is relative to the currently opened Spyder project?

Versions

  • Spyder version: 6.0.0 (standalone)
  • Python version: Python 3.11.9 64-bit
  • Qt version: Qt 5.15.8
  • PyQt version: PyQt5 5.15.9
  • Operating System name/version: Windows 10 (AMD64)

Dependencies

# Mandatory:
aiohttp >=3.9.3                  :  3.10.5 (OK)
asyncssh >=2.14.0,<3.0.0         :  2.17.0 (OK)
atomicwrites >=1.2.0             :  1.4.1 (OK)
chardet >=2.0.0                  :  5.2.0 (OK)
cloudpickle >=0.5.0              :  3.0.0 (OK)
cookiecutter >=1.6.0             :  2.6.0 (OK)
diff_match_patch >=20181111      :  20230430 (OK)
github >=2.3.0                   :  2.4.0 (OK)
importlib_metadata >=4.6.0       :  8.4.0 (OK)
intervaltree >=3.0.2             :  3.1.0 (OK)
IPython >=8.13.0,<9.0.0,!=8.17.1 :  8.27.0 (OK)
jedi >=0.17.2,<0.20.0            :  0.19.1 (OK)
jellyfish >=0.7                  :  1.1.0 (OK)
jsonschema >=3.2.0               :  4.23.0 (OK)
keyring >=17.0.0                 :  25.3.0 (OK)
nbconvert >=4.0                  :  7.16.4 (OK)
numpydoc >=0.6.0                 :  1.8.0 (OK)
parso >=0.7.0,<0.9.0             :  0.8.4 (OK)
pexpect >=4.4.0                  :  4.9.0 (OK)
pickleshare >=0.4                :  0.7.5 (OK)
psutil >=5.3                     :  6.0.0 (OK)
pygments >=2.0                   :  2.18.0 (OK)
pylint >=3.1,<4                  :  3.2.7 (OK)
pylint_venv >=3.0.2              :  3.0.3 (OK)
pyls_spyder >=0.4.0              :  0.4.0 (OK)
pylsp >=1.12.0,<1.13.0           :  1.12.0 (OK)
pylsp_black >=2.0.0,<3.0.0       :  2.0.0 (OK)
pyuca >=1.2                      :  1.2 (OK)
qdarkstyle >=3.2.0,<3.3.0        :  3.2.3 (OK)
qstylizer >=0.2.2                :  0.2.3 (OK)
qtawesome >=1.3.1,<1.4.0         :  1.3.1 (OK)
qtconsole >=5.6.0,<5.7.0         :  5.6.0 (OK)
qtpy >=2.4.0                     :  2.4.1 (OK)
rtree >=0.9.7                    :  1.3.0 (OK)
setuptools >=49.6.0              :  73.0.1 (OK)
sphinx >=0.6.6                   :  8.0.2 (OK)
spyder_kernels >=3.0.0,<3.1.0    :  3.0.0 (OK)
superqt >=0.6.2,<1.0.0           :  0.6.7 (OK)
textdistance >=4.2.0             :  4.6.2 (OK)
three_merge >=0.1.1              :  0.1.1 (OK)
watchdog >=0.10.3                :  5.0.1 (OK)
yarl >=1.9.4                     :  1.9.7 (OK)
zmq >=24.0.0                     :  26.2.0 (OK)

# Optional:
cython >=0.21                    :  3.0.11 (OK)
matplotlib >=3.0.0               :  3.9.2 (OK)
numpy >=1.7                      :  2.1.0 (OK)
pandas >=1.1.1                   :  2.2.2 (OK)
scipy >=0.17.0                   :  1.14.1 (OK)
sympy >=0.7.3                    :  1.13.2 (OK)

roteiro avatar Sep 12 '24 11:09 roteiro