任何学习 Python 的同学都知道 Jupyter notebook
(以前叫 Ipython notebook)这个强大的工具。当我们需要进行一些实验性的演示编码时,它提供了超级便利。第一次用过后我便喜欢上它,成为手头不可或缺的工具库成员。通常我们会这样来使用它:
- 在各台机器上启动 jupyter-notebook,登陆不同设备再重复这个过程
- 在远程服务器上安装设置 jupyter 然后启动 jupyter-notebook(通常在命令行或者 tmux 会话里),下次登陆再重复这个过程
- 或者在 Docker 镜像里重复上一步
- 使用 Azure Notebooks
- 将它设置成服务器后台服务,需要你对系统有管理员权限
我习惯将 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 配置文件的创建,举一反三,今后再也不用去重复手动启动后台程序了。
网友评论