Repository: spyder-ide/spyder

Issue:
Error when trying to add directories in PythonPath Manager
## Description

### What steps will reproduce the problem?

<!--- You can use Markdown here --->

Installed selenium with pip. Try adding /sitepackages in the tools in spyder, but doesn't work.

### Traceback
```python-traceback
Traceback (most recent call last):
  File "/Applications/Spyder.app/Contents/Resources/lib/python3.9/spyder/plugins/pythonpath/widgets/pathmanager.py", line 169, in <lambda>
    triggered=lambda x: self.add_path())
  File "/Applications/Spyder.app/Contents/Resources/lib/python3.9/spyder/plugins/pythonpath/widgets/pathmanager.py", line 456, in add_path
    if self.listwidget.row(self.user_header) < 0:
RuntimeError: wrapped C/C++ object of type QListWidgetItem has been deleted
```

## Versions

* Spyder version: 5.4.2 93124668b (standalone)
* Python version: 3.9.14 64-bit
* Qt version: 5.15.2
* PyQt5 version: 5.15.7
* Operating System: Darwin 22.2.0

### Dependencies

```
# Mandatory:
atomicwrites >=1.2.0                 :  1.4.1 (OK)
chardet >=2.0.0                      :  5.1.0 (OK)
cloudpickle >=0.5.0                  :  2.2.0 (OK)
cookiecutter >=1.6.0                 :  2.1.1 (OK)
diff_match_patch >=20181111          :  20200713 (OK)
intervaltree >=3.0.2                 :  3.1.0 (OK)
IPython >=7.31.1;<9.0.0              :  8.8.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.2.8 (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.4 (OK)
pygments >=2.0                       :  2.14.0 (OK)
pylint >=2.5.0;<3.0                  :  2.15.10 (OK)
pylint_venv >=2.1.1                  :  None (OK)
pyls_spyder >=0.4.0                  :  0.4.0 (OK)
pylsp >=1.7.1;<1.8.0                 :  1.7.1 (OK)
pylsp_black >=1.2.0                  :  1.2.1 (OK)
qdarkstyle >=3.0.2;<3.1.0            :  3.0.3 (OK)
qstylizer >=0.2.2                    :  0.2.2 (OK)
qtawesome >=1.2.1                    :  1.2.2 (OK)
qtconsole >=5.4.0;<5.5.0             :  5.4.0 (OK)
qtpy >=2.1.0                         :  2.3.0 (OK)
rtree >=0.9.7                        :  1.0.1 (OK)
setuptools >=49.6.0                  :  66.0.0 (OK)
sphinx >=0.6.6                       :  5.1.1 (OK)
spyder_kernels >=2.4.2;<2.5.0        :  2.4.2 (OK)
textdistance >=4.2.0                 :  4.5.0 (OK)
three_merge >=0.1.1                  :  0.1.1 (OK)
watchdog >=0.10.3                    :  2.2.1 (OK)
zmq >=22.1.0                         :  24.0.1 (OK)

# Optional:
cython >=0.21                        :  0.29.33 (OK)
matplotlib >=3.0.0                   :  3.6.3 (OK)
numpy >=1.7                          :  1.24.1 (OK)
pandas >=1.1.1                       :  1.5.2 (OK)
scipy >=0.17.0                       :  1.10.0 (OK)
sympy >=0.7.3                        :  1.11.1 (OK)

# Spyder plugins:
spyder_terminal.terminalplugin 1.2.2 :  1.2.2 (OK)
```



Discussion:
Hey @jeannotr, thanks for reporting. We'll try to fix this error in our next version (5.4.3), to be released next month.

You also said:

> Try adding /sitepackages in the tools in spyder, but doesn't work.

Even after fixing the error you reported, I'm afraid you won't be able to do what you want because Spyder doesn't accept adding the `site-packages` directory of another Python installation through its Python path manager. We decided to prevent that because it would lead to mixing packages of different Python versions (e.g. 3.9 and 3.11) or providers (e.g. Anaconda and MacPorts, which are binary incompatible).

So, to do what you want you need to follow [these instructions](https://docs.spyder-ide.org/5/faq.html#using-packages-installer) in our documentation. In your case, you don't need to install Anaconda and then install Selenium again because you already did that (even if you didn't use Anaconda). You simply need to install Spyder-kernels in your external Python installation and then change your Python interpreter to point to it.
Hi,

Thanks for this very complete reply. Really appreciate it.

Best,
Jehan


> Le 9 févr. 2023 à 16:25, Carlos Cordoba ***@***.***> a écrit :
> 
> 
> Hey @jeannotr <https://github.com/jeannotr>, thanks for reporting. We'll try to fix this error in our next version (5.4.3), to be released next month.
> 
> You also said:
> 
> Try adding /sitepackages in the tools in spyder, but doesn't work.
> 
> Even after fixing the error you reported, I'm afraid you won't be able to do what you want because Spyder doesn't accept adding the site-packages directory of another Python installation through its Python path manager. We decided to prevent that because it would lead to mixing packages of different Python versions (e.g. 3.9 and 3.11) or providers (e.g. Anaconda and MacPorts, which are binary incompatible).
> 
> So, to do what you want you need to follow the instructions in our documentation <https://docs.spyder-ide.org/5/faq.html#using-packages-installer>. In your case, you don't need to install Anaconda and then install Selenium again because you already did that (even if you didn't use Anaconda). You simply need to install Spyder-kernels in your external Python installation and then change your Python interpreter to point to it.
> 
> —
> Reply to this email directly, view it on GitHub <https://github.com/spyder-ide/spyder/issues/20506#issuecomment-1424367338>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/A5YZS56GTFDKR3VX75QOTHTWWUD7TANCNFSM6AAAAAAUWOBEU4>.
> You are receiving this because you were mentioned.
> 


@ccordoba12 The issue also occurs with PySide2. I will make a PR with a fix tomorrow.
Great! Thanks for your help with that.

Resolving patch:
diff --git a/spyder/plugins/pythonpath/widgets/pathmanager.py b/spyder/plugins/pythonpath/widgets/pathmanager.py
--- a/spyder/plugins/pythonpath/widgets/pathmanager.py
+++ b/spyder/plugins/pythonpath/widgets/pathmanager.py
@@ -244,6 +244,10 @@ def editable_top_row(self):
     def setup(self):
         """Populate list widget."""
         self.listwidget.clear()
+        self.headers.clear()
+        self.project_header = None
+        self.user_header = None
+        self.system_header = None
 
         # Project path
         if self.project_path:


Test patch: