因爲實習的地方有些數據在服務器上,代碼也要放到服務器上跑,
但是把數據拷到本地-本地寫代碼-代碼放上服務器-在服務器調試太麻煩了,所以想把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!