因为实习的地方有些数据在服务器上,代码也要放到服务器上跑,
但是 把数据拷到本地-本地写代码-代码放上服务器-在服务器调试太麻烦了,所以想把jupyter映射到本地。
本以为很简单,没想到因为服务器上python版本管理得不太好,加上对linux不熟悉,所以踩了大半天坑,记一下防止再踩。
注:#后是服务器上的代码,$后是本地终端的代码。
0.基本信息
- 服务器版本:
# cat /proc/version
Linux version 3.10.0-327.el7.x86_64 (mockbuild@x86-ol7-builder-01)
(gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) )
-
服务器python版本:
2.7,3.3,3.6,3.7都有…
平常使用的是3.7,对应的pip是pip3
-
本地版本:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.5
BuildVersion: 17F77
1. 安装、试用Jupyter
- 安装
# pip3 install jupyter
- 试用
# jupyter-notebook
然而报错了,未找到命令...
(如果没报错就直接看第二步)
尝试1 - 失败
- 再安装
考虑到服务器上的python版本比较多,所以百度了一通,找到这个,重新装了jupyter。
# python3 -m pip install jupyter
- 再试用
# jupyter-notebook
还是报错,但是为什么对应的是python3.6?
尝试2 - 失败
又百度了一通,发现这个,跟着查了python的路径,是/usr/bin/python
。
再查一下jupyter notebook的kernel环境,并顺着网线爬过去:
# jupyter kernelspec list
# cd /root/.local/share/jupyter/kernels/python3
# vi kernel.json
python地址并没有错……
尝试3 - 成功
又又百度了一通,没有找到解决方案,只好回去看报错,发现罪恶的源头在/usr/local/bin/jupyter-notebook
,继续顺着网线爬过去。
# cd /usr/local/bin/
# vi jupyter-notebook
所以notebook的定位是/usr/local/bin/python3
,爬过去!
# cd /usr/bin/
# ls -l | grep python3
python3 -> /usr/local/python/bin/python
原来jupyter notebook链接的是/usr/local/python/bin/python
,而我需要用的python3.7在/usr/local/python37/bin/python3.7
,所以有两个解决方案:
- 改jupyter-notebook的代码
把第一行的声明改成#!/usr/local/bin/python3
(但是不知道为什么失败了) - 改python3的链接 参考
# rm -rf /usr/local/bin/python3
# ln -s /usr/local/python37/bin/python3.7 /usr/local/bin/python3
再试着启动jupyter-notebook,成功。
2. 映射到本地
$ ssh root@*ip -L 127.0.0.1:1234:127.0.0.1:8888
# jupyter notebook --no-browser --port=8888 --allow-root
*ip为服务器的地址,1234是想要映射到本地的地址(可改),8888是想要映射到服务器上的地址(可改,但要与打开时指定的port对应)。
然后复制url,把localhost:后面的四位数改成1234,打开本地的浏览器粘贴进地址栏,就可以了。
最后,祭上混乱的python……
3. update-多核jupyter
- python 2, 参考,达成!
# python2 -m pip install ipykernel
# python2 -m ipykernel install --user
- python 3.5/python3.7共存
思路: 现在对应的是3.7,复制3.7的kernel文件, 改里面的细节。
# jupyter kernelspec list #查看kernel文件的位置
# cd /root/.local/share/jupyter/kernels/ #进入
# ll #查看该文件夹下的子文件夹
# cd ./python3 #进入python3文件夹里
# ll #查看该文件夹下有啥
可以发现每个kernel就是一个文件夹,文件夹里对应一个json文件,所以如法炮制,在/root/.local/share/jupyter/kernels/
下新建文件夹(python3.5),在新建的文件夹里复制3的kernel.json,再修改里面的细节。
# mkdir /root/.local/share/jupyter/kernels/python3.5
# cp -p /root/.local/share/jupyter/kernels/python3/kernel.json /root/.local/share/jupyter/kernels/python3.5
# cd /root/.local/share/jupyter/kernels/python3.5
# vi kernel.json
修改框出来的两个地方就好啦!
done!