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