spyder虽然平时在本地用起来很方便,但是偶尔还是想使用远程运行远程linux服务器上的代码和环境
1.需要在远程的服务端启动spyder服务
启动spyder核
root@AI# python -m spyder_kernels.console
NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.
To exit, you will have to explicitly quit this process, by either sending
"quit" from a client, or using Ctrl-\ in UNIX-like environments.
To read more about this, see https://github.com/ipython/ipython/issues/2049
To connect another client to this kernel, use:
--existing kernel-26032.json
会生成一个json文件 ,具体文件的位置不是在执行这条命令的路径下,需要使用这个命令找到路径:
root@AI# jupyter --runtime-dir
/run/user/0/jupyter
接下来在这个路径 找到json 文件(kernel-26032.json) ,拷贝这个json文件到Windows上
接下来 就可以使用win端的spyder连接了
2.连接spyder
在spyder的右下侧找到这个进连接
接下来会弹出来一个窗口
host的使用格式:root@ip:端口号
ssh key不用管,内容填好然后点击ok就可以连接上了,如果出现下面错误
然后需要在win上安装一下就行
pip install Paramiko
然后再去连接就可以了
注意的是,安装Paramiko后需要重启spyder才能生效 ,不然很可能还是一样的错误
3.使用
连接好的界面相当于python的命令行形式
比如试一下:
发现是没问题的
上面只是命令行形式,但是很多时候我们 还是想运行一个python文件方便 一些
注意的是,没办法直接运行Windows上面的python 文件的,会找不到路径,因为我们python核毕竟在远程,我们也没进行远程提交任务到服务端
接下来我们运行一下linux远程的文件
代码 如下
import subprocess
top_info = subprocess.Popen(["/data/opt/AAN/bin/python3", "/data/opt/test.py"], stdout=subprocess.PIPE)
top_info.communicate()
这个test.py是linux远程的文件,内容如下:
print(1)
print(1)
print(1)
print(1)
我们可以看到,前面的运行结果就是四个1
不过结果还是令人不满意,因为这样的话,和xshell上运行远程也没区别,那干嘛还用spyder呢
下面这样就可以在win上进行操作:
# -*- coding: utf-8 -*-
print(1)
import torch
print(torch.__version__)
# %%
在代码最后一行加入# %%
使之成为cell
然后这样就行或者按键盘的Ctrl+Enter键也可以
运行结果:
这样本地的python文件就可以直接运行了
不过,还是有问题,因为还没 读取数据,这个运行方式相当于只是将代码发送给了console
因此如果我们这样读取本地文件的数据,会出现
# -*- coding: utf-8 -*-
import pandas as pd
df=pd.read_csv('C:\\sample-orders.csv')
print(df)
# %%
需要将路径修改为linux服务器上的数据路径,也就是数据需要上传到上面:
这样就行:
# -*- coding: utf-8 -*-
import pandas as pd
df=pd.read_csv('/data/opt/sample-orders.csv')
print(df)
# %%
运行结果:
不过还会有新的问题,比如调用另外一个文件的函数时会出错,因为cell相当于只是发送cell里面的代码,而不知道依赖的文件在哪,这样会报错
这里是调用Utils.py下面的函数
# -*- coding: utf-8 -*-
from Utils import get_data
df=get_data('/data/opt/sample-orders.csv')
print(df)
# %%
解决方式,索性直接将需要依赖的文件(这里是Utils.py)上传到linux上,固定在某个路径下,这里我是将Utils.py放在了/data/opt/test下面。
# -*- coding: utf-8 -*-
import sys
sys.path.append("/data/opt/test")
from Utils import get_data
df=get_data('/data/opt/sample-orders.csv')
print(df)
# %%
结果: