spyder-ide / spyder

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

remote server kernel #22731

Open emooney06 opened 1 month ago

emooney06 commented 1 month ago

Description

What steps will reproduce the problem?

when I connect to a remote server, the connection is successful, but the error is encountered when trying to open a new console in the remote server.

Traceback

exception calling callback for <Future at 0x1494c851e50 state=finished raised ClientConnectorError>
Traceback (most recent call last):
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1073, in _wrap_create_connection
    sock = await aiohappyeyeballs.start_connection(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohappyeyeballs\impl.py", line 104, in start_connection
    raise first_exception
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohappyeyeballs\impl.py", line 81, in start_connection
    sock = await _connect_sock(
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohappyeyeballs\impl.py", line 166, in _connect_sock
    await loop.sock_connect(sock, address)
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\proactor_events.py", line 726, in sock_connect
    return await self._proactor.connect(sock, address)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\tasks.py", line 349, in __wakeup
    future.result()
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\windows_events.py", line 854, in _poll
    value = callback(transferred, key, ov)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\windows_events.py", line 641, in finish_connect
    ov.getresult()
ConnectionRefusedError: [WinError 1225] The remote computer refused the network connection

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\concurrent\futures\_base.py", line 340, in _invoke_callbacks
    callback(self)
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\api\asyncdispatcher.py", line 128, in _callback_task_done
    raise exception
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\tasks.py", line 277, in __step
    result = coro.send(None)
             ^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\plugin.py", line 333, in _start_new_kernel
    return await client.start_new_kernel_ensure_server()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\api\client.py", line 697, in start_new_kernel_ensure_server
    kernel_id = await self.start_new_kernel()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\api\client.py", line 754, in start_new_kernel
    response = await jupyter.create_kernel(kernel_spec=kernel_spec)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\api\jupyterhub\__init__.py", line 296, in create_kernel
    async with self.session.post(
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\client.py", line 1353, in __aenter__
    self._resp = await self._coro
                 ^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\client.py", line 657, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 564, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 975, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1350, in _create_direct_connection
    raise last_exc
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1319, in _create_direct_connection
    transp, proto = await self._wrap_create_connection(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1088, in _wrap_create_connection
    raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 127.0.0.1:55983 ssl:default [The remote computer refused the network connection]
exception calling callback for <Future at 0x1494c851e50 state=finished raised ClientConnectorError>
Traceback (most recent call last):
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1073, in _wrap_create_connection
    sock = await aiohappyeyeballs.start_connection(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohappyeyeballs\impl.py", line 104, in start_connection
    raise first_exception
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohappyeyeballs\impl.py", line 81, in start_connection
    sock = await _connect_sock(
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohappyeyeballs\impl.py", line 166, in _connect_sock
    await loop.sock_connect(sock, address)
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\proactor_events.py", line 726, in sock_connect
    return await self._proactor.connect(sock, address)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\tasks.py", line 349, in __wakeup
    future.result()
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\windows_events.py", line 854, in _poll
    value = callback(transferred, key, ov)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\windows_events.py", line 641, in finish_connect
    ov.getresult()
ConnectionRefusedError: [WinError 1225] The remote computer refused the network connection

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\concurrent\futures\_base.py", line 340, in _invoke_callbacks
    callback(self)
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\plugin.py", line 294, in <lambda>
    ipyclient, future.result()
               ^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\concurrent\futures\_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\concurrent\futures\_base.py", line 401, in __get_result
    raise self._exception
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\concurrent\futures\_base.py", line 340, in _invoke_callbacks
    callback(self)
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\api\asyncdispatcher.py", line 128, in _callback_task_done
    raise exception
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\asyncio\tasks.py", line 277, in __step
    result = coro.send(None)
             ^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\plugin.py", line 333, in _start_new_kernel
    return await client.start_new_kernel_ensure_server()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\api\client.py", line 697, in start_new_kernel_ensure_server
    kernel_id = await self.start_new_kernel()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\api\client.py", line 754, in start_new_kernel
    response = await jupyter.create_kernel(kernel_spec=kernel_spec)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\spyder\plugins\remoteclient\api\jupyterhub\__init__.py", line 296, in create_kernel
    async with self.session.post(
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\client.py", line 1353, in __aenter__
    self._resp = await self._coro
                 ^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\client.py", line 657, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 564, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 975, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1350, in _create_direct_connection
    raise last_exc
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1319, in _create_direct_connection
    transp, proto = await self._wrap_create_connection(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ejmooney\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\aiohttp\connector.py", line 1088, in _wrap_create_connection
    raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 127.0.0.1:55983 ssl:default [The remote computer refused the network connection]

Versions

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.5.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.4.1 (OK)
nbconvert >=4.0                  :  7.11.0 (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.3.0 (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              :  74.1.2 (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.2 (OK)
yarl >=1.9.4                     :  1.9.4 (OK)
zmq >=24.0.0                     :  24.0.1 (OK)

# Optional:
cython >=0.21                    :  3.0.11 (OK)
matplotlib >=3.0.0               :  3.9.2 (OK)
numpy >=1.7                      :  2.1.1 (OK)
pandas >=1.1.1                   :  2.2.3 (OK)
scipy >=0.17.0                   :  1.14.1 (OK)
sympy >=0.7.3                    :  1.13.2 (OK)
ccordoba12 commented 3 weeks ago

Hey @emooney06, thanks for reporting. The last line in the error you posted is this

aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 127.0.0.1:55983 ssl:default [The remote computer refused the network connection]

So, the problem seems to be that you have strict firewall rules in your computer that don't allow to open random ports in it. And Spyder needs to open those ports to communicate with the different channels used by remote kernels.

This means that you need to either turn off your firewall or allow it to open any port in your computer for Spyder to create a console for you.

Let us know if that's helpful to solve your problem.

ccordoba12 commented 3 weeks ago

@hlouzada, this will be solved when you implement de-multiplexing of the pyzmq kernel channels, right?

hlouzada commented 3 weeks ago

@ccordoba12 I'm not quite sure if this is a firewall issue. Either way the de-multiplexing won't fix because I still need to communicate with the server, and that's what's falling. It can be a problem with the server not listening, but I need mor info. Can you send the full log? @emooney06