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

Editor Ctrl+click to other scripts or modules does not work for Numpy and Pandas #21077

Open Miguel-LlamasLanza opened 1 year ago

Miguel-LlamasLanza commented 1 year ago

Issue Report Checklist

Problem Description

Clicking on a imported module, class or function, does not open the corresponding file and show the corresponding method. It works sometimes for some modules.

What steps reproduce the problem?

  1. Import a module or script (e.g. import numpy), in your script.
  2. Press the 'ctrl' key and click 'numpy', in spyder editor.

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

I would expect the corresponding file to open. Instead, it does not do anything, except in some rare cases.

Versions

Dependencies

# 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)
ccordoba12 commented 1 year ago

Hey @Miguel-LlamasLanza, thanks for reporting. It's not possible to get definitions for many objects (i.e. modules and functions) of libraries in the Scientific Python ecosystem (e.g. Numpy and Pandas) because they are binary libraries and not pure Python ones. And it's only for the latter that you can actually inspect their implementations.

The best we could do is to show the stub files (i.e. pyi ones) associated to those libraries, so users can inspect the signatures of objects declared in them. That's working for some binary libraries (e.g. PyQt) but (oddly) not for Numpy and Pandas. We'll have to investigate why that's not the case.

Miguel-LlamasLanza commented 1 year ago

Thank you for your explanation. Besides those libraries, it does not work either for classes and function in my own scripts (fully python scripts). For example

from myscript import my_class
myclass.mymethod()

If I click in myclass or mymethod, it does not lead me to the other scripts.

ccordoba12 commented 1 year ago

Did you add the directory where myscript is located to PYTHONPATH using our Python path manager?

Miguel-LlamasLanza commented 1 year ago

That solved the issue in most cases, thanks! I thought that the working directory would be always included in the PYTHONPATH, but it is not the case.

However, there is still another use-case where it does not seem to work. It is when using from . import myscript, even if I add the corresponding path to the PYTHONPATH manager

ccordoba12 commented 1 year ago

That solved the issue in most cases, thanks! I thought that the working directory would be always included in the PYTHONPATH, but it is not the case.

It is, or at least it should be. I mean, it shouldn't be necessary to add the working directory to PYTHONPATH for this to work.

Could you upload a set of files that show the problem so we can take at it on our side? Thanks!

However, there is still another use-case where it does not seem to work. It is when using from . import myscript, even if I add the corresponding path to the PYTHONPATH manager

This is odd too.