我知道你们会用 Jupyter notebook 但你会配置 Jupyter 服务吗?

任何学习 Python 的同学都知道 Jupyter notebook (以前叫 Ipython notebook)这个强大的工具。当我们需要进行一些实验性的演示编码时,它提供了超级便利。第一次用过后我便喜欢上它,成为手头不可或缺的工具库成员。通常我们会这样来使用它:

  1. 在各台机器上启动 jupyter-notebook,登陆不同设备再重复这个过程
  2. 在远程服务器上安装设置 jupyter 然后启动 jupyter-notebook(通常在命令行或者 tmux 会话里),下次登陆再重复这个过程
  3. 或者在 Docker 镜像里重复上一步
  4. 使用 Azure Notebooks
  5. 将它设置成服务器后台服务,需要你对系统有管理员权限

我习惯将 notebooks 集中放置,这样便于管理,同时可以方便地在各个设备上使用,本文将讨论在 Windows 10 环境下使用 Hyper-V 虚拟机按第5个方式安装配置 Jupyter 服务, Hyper-V 提供了虚拟机自动后台启动,很方便我们在 Linux 服务器环境下的实验和学习。下面将按照相关步骤完成 Jupyter 服务的安装和配置。

系统环境:

  • Centos7 系统并有 sudoer 权限
  • Python3 最新版(3.7.2)

开启 Hyper-V 并创建 Centos7 虚拟机

步骤:

  • 开启 Hyper-V
  • 安装 Centos7 虚拟机
  • 配置好虚拟机的静态 IP 地址

怎样开启 Hyper-V 和安装 Centos7 虚拟机,同时配置好虚拟机的静态 IP 地址。这里就不再详述,网上教程一大把,大家可以自行谷歌。

使用 Pyenv 管理多版本 Python

Centos7 自带的 Python3 版本比较旧,学习和实验自然选最新的版本了,pyenv 这个工具满足了我们这个需求。

首先安装 Python 的依赖包,Pyenv 编译 Python 时需要用到:

sudo yum -y groupinstall "Development tools"

sudo yum -y install  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel  gdbm-devel  xz-devel libffi-devel uuid-devel libuuid-devel tcl-devel

安装和配置 Pyenv

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

如果使用 zsh 改成以下命令:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshenv
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshenv
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshenv

最后执行:

exec "$SHELL"

➜  ~ pyenv help
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

这样我们的 Pyenv 环境就安装好了。下面就是安装最新版的 Python3:

➜  ~ pyenv install -v 3.7.2

➜  ~ pyenv rehash

➜  ~ pyenv versions
* system
  3.7.2 (set by /home/musan/.pyenv/version)

➜  ~ pyenv global 3.7.2

➜  ~ pyenv versions
  system
* 3.7.2 (set by /home/musan/.pyenv/version)

➜  ~ python -V
Python 3.7.2
➜  ~ pip -V
pip 18.1 from /home/musan/.pyenv/versions/3.7.2/lib/python3.7/site-packages/pip (python 3.7)
➜  ~

现在我们的 Python 3.7.2 环境安装好了,剩下的就是 pip 安装需要的包:notebook。不熟悉 pyenv 的同学请自行补课。

配置 jupyter-notebook 服务器

创建工作目录

mkdir notebooks

创建的 /home/musan/notebooks 这个目录用来放置所有的 notebooks 文档。
下面创建登陆密码:

 ~ python
Python 3.7.2 (default, Dec 26 2018, 15:30:15)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from notebook.auth import passwd
>>> passwd()
Enter password:
Verify password:
'sha1:8ba6ed3ed711:8b9253b89af83513c9fe61bae8fbf2f3cd027a30'
>>>

下面准备好 jupyter 启动的配置文件

jupyter notebook --generate-config

这个命令会在我们的工作目录创建一个 ~/.jupyter/jupyter_notebook_config.py 配置文件,我们根据需要修改以下配置项:

c.NotebookApp.port = 8888
c.NotebookApp.ip = '0.0.0.0'  # 这里使用默认的 8888
c.NotebookApp.password = 'sha1:8ba6ed3ed711:8b9253b89af83513c9fe61bae8fbf2f3cd027a30'  # 这个就是我们上面生成的密码
c.NotebookApp.notebook_dir = '/home/musan/notebooks'

将 jupyter-notebook 加入服务列表

准备好 Python 环境后,接着安装好相应的 jupyter 包,我们就可以开始愉快的玩耍了。但是我是一个很懒的人,我想要 jupyter notebook 自动跟随系统启动运行。

sudo vi /usr/lib/systemd/system/jupyter.service

接下来准备

[Unit]
Description=Juyper-NoteBook

[Service]
Tpye=simple
PIDFile=/var/run/jupyter.pid
ExecStart=/home/musan/.pyenv/shims/jupyter-notebook --no-browser
WorkingDirectory=/home/musan/notebooks
User=musan
Group=musan

[Install]
WantedBy=multi-user.target%

配置 centos 防火墙端口,让我们可以远程访问服务器

sudo chmod 644 /usr/lib/systemd/system/jupyter.service

sudo firewall-cmd --zone=public --add-port=8888/tcp --permanent  # 端口根据你上面的配置文件里的端口号,这里使用默认的 8888
sudo firewall-cmd --reload

将 jupyter-notebook 加入系统服务列表并启动后台服务

sudo systemctl daemon-reload
sudo systemctl enable jupyter
sudo systemctl start jupyter
jupyter.png

总结

到此,Jupyter 服务已经配置好了,它将跟随系统一起后台启动,所有的 notebook 文档都规整在统一的文件夹里,强迫症减轻了不少 :)。本文主要介绍了 centos7 下使用最新版的 Python 方法,如何配置自定义服务的几个步骤和要点,介绍了 systemd 系统管理 xxxx.service 配置文件的创建,举一反三,今后再也不用去重复手动启动后台程序了。

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容