【问题标题】:Connecting to a Windows IPython kernel from Linux从 Linux 连接到 Windows IPython 内核
【发布时间】:2014-07-23 03:13:05
【问题描述】:
  • 我有一台 Windows 机器,我在其中启动一个 IPython 内核(做一些在另一台机器上不可能完成的事情)。
  • 我有一台 Linux 机器,我想从它连接到在 Windows 机器上运行的 IPython 内核。
  • 我可以从 Linux 机器 SSH 到 Windows 机器(使用这个解决方案:https://superuser.com/a/172299)。

我尝试过以下操作:https://github.com/ipython/ipython/wiki/Cookbook:-Connecting-to-a-remote-kernel-via-ssh。自动和手动解决方案都提供以下内容:

“错误:内核没有响应”

使用相同的解决方案,我可以从我的 Linux 机器连接到在 Linux 服务器上运行的 IPython 内核。有什么解决方案可以让它在 Linux 到 Windows 上工作?

【问题讨论】:

    标签: python ipython


    【解决方案1】:

    我再次在https://github.com/ipython/ipython/wiki/Cookbook%3a-Connecting-to-a-remote-kernel-via-ssh 上尝试了手动方式,它成功了。详细:

    windows-machine$ ipython kernel -f kernel-1234.json
    

    linux-machine$ scp windows-machine:path/to/kernel-1234.json .
    linux-machine$ cat kernel-1234.json
    {
      "stdin_port": 55534, 
      "ip": "127.0.0.1", 
      "control_port": 58391, 
      "hb_port": 60540, 
      "signature_scheme": "hmac-sha256", 
      "key": "fa461cf7-f078-4c22-909f-cfa7d2a30596", 
      "shell_port": 60159, 
      "transport": "tcp", 
      "iopub_port": 59207
    }
    linux-machine$ ssh -f -N -L 55534:127.0.0.1:55534
    linux-machine$ ssh -f -N -L 58391:127.0.0.1:58391
    linux-machine$ ssh -f -N -L 60540:127.0.0.1:60540
    linux-machine$ ssh -f -N -L 60159:127.0.0.1:60159
    linux-machine$ ssh -f -N -L 59207:127.0.0.1:59207
    linux-machine$ ipython console --existing kernel-1234.json
    

    【讨论】:

    • kernel-1234.json 在 Windows 机器上的位置在哪里?
    【解决方案2】:

    您不需要 SSH 连接到远程 ipython 内核,无论它是在 WindowsLinuxMac 上运行的 ipython 内核。您需要的是让远程内核的 Ip 对您尝试连接的终端可见。步骤如下:

    1. 找出server(运行ipython内核的机器,即您希望进行计算的机器)和client(您尝试连接的机器)的IP地址):

      1.1。如果您使用的是Windows,请打开命令提示符并执行ipconfig 以找出 IP 地址。如果Windows 服务器具有直接的 Internet 连接/局域网连接,您应该会看到几个 ip,例如 192.168.57.110.2.3.64127.0.0.1

      1.2。如果您使用的是linux,请打开终端并输入ifconfigip addr show。您应该再次看到几个 ip,例如 192.168.57.110.2.3.64127.0.0.1

      1.3。测试您的至少一个server IP 地址是否可以从client 中看到:使用命令ping 从您的client ping 您的serverping 可以在 Windows 或 Linux 终端上运行。如果您将 windows/Linux 作为 VM 运行或在防火墙后面,则很有可能您的客户端或服务器从另一侧看不到。您不必 ping IP 地址127.0.0.1。这是一个环回地址,仅在您获得此 IP 地址的同一台机器上可见。例如,如果您从 Windows 机器 ping 127.0.0.1,它将 ping 同一台 Windows 机器。如果您的clientserver 实例在同一台机器上运行,那么可以使用此地址。但是,如果您的客户端或服务器在 VM 或其他机器上运行,那么127.0.0.1 将无法工作。

    2. 启动远程内核:

      2.1。一旦你确定了服务器上的哪个 IP 地址可以从客户端看到,使用ipython kernel 在机器上启动一个内核。 ipython 内核将启动并显示`要将另一个客户端连接到此内核,请使用: --existing kernel-1234.json

      2.2。通过导入 (https://stackoverflow.com/a/35094772/4752883) 在您的 server 上找到 kernel-1234.json 文件 In [1]: from jupyter_client import find_connection_file In [2]: find_connection_file() Out[2]: 'C:\\Users\\me\\AppData\\Roaming\\jupyter\\runtime\\kernel-1234.json' 这适用于LinuxWindows

    3. 启动远程客户端:

      3.1。找到文件后,使用 linux 中的 scp 或 windows 中的 pscpwinscp 将其复制到您的服务器计算机上 SCP w/ ssh: copying a local file from windows to a remote server using scp

      3.2。确保您与kernel-1234.json 文件位于同一目录。

      3.3。使用 vim 或您喜欢的文本编辑器打开 kernel-1234.json 文件。你会注意到一行写着"ip": "127.0.0.1"。将您在步骤1.3 中发现的服务器上的ip 地址更改为127.0.0.1,并保存json 文件。

      3.4。使用jupyter console –existing=kernel-1234.json 启动远程内核,同时位于kernel-1234.json 所在的同一驱动器中。

    如果您已按照上述步骤操作,您现在应该能够连接到远程 ipython 内核,无论 ipython 内核是否在 Windows/Linux/Mac 上运行。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 2016-02-22
      • 2017-05-22
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 2017-08-22
      相关资源
      最近更新 更多