任何學(xué)習(xí) Python 的同學(xué)都知道 Jupyter notebook
(以前叫 Ipython notebook)這個(gè)強(qiáng)大的工具割按。當(dāng)我們需要進(jìn)行一些實(shí)驗(yàn)性的演示編碼時(shí),它提供了超級便利蚯嫌。第一次用過后我便喜歡上它哲虾,成為手頭不可或缺的工具庫成員丙躏。通常我們會這樣來使用它:
- 在各臺機(jī)器上啟動 jupyter-notebook择示,登陸不同設(shè)備再重復(fù)這個(gè)過程
- 在遠(yuǎn)程服務(wù)器上安裝設(shè)置 jupyter 然后啟動 jupyter-notebook(通常在命令行或者 tmux 會話里),下次登陸再重復(fù)這個(gè)過程
- 或者在 Docker 鏡像里重復(fù)上一步
- 使用 Azure Notebooks
- 將它設(shè)置成服務(wù)器后臺服務(wù)晒旅,需要你對系統(tǒng)有管理員權(quán)限
我習(xí)慣將 notebooks 集中放置栅盲,這樣便于管理,同時(shí)可以方便地在各個(gè)設(shè)備上使用废恋,本文將討論在 Windows 10 環(huán)境下使用 Hyper-V 虛擬機(jī)按第5個(gè)方式安裝配置 Jupyter 服務(wù)谈秫, Hyper-V 提供了虛擬機(jī)自動后臺啟動,很方便我們在 Linux 服務(wù)器環(huán)境下的實(shí)驗(yàn)和學(xué)習(xí)鱼鼓。下面將按照相關(guān)步驟完成 Jupyter 服務(wù)的安裝和配置拟烫。
系統(tǒng)環(huán)境:
- Centos7 系統(tǒng)并有 sudoer 權(quán)限
- Python3 最新版(3.7.2)
開啟 Hyper-V 并創(chuàng)建 Centos7 虛擬機(jī)
步驟:
- 開啟 Hyper-V
- 安裝 Centos7 虛擬機(jī)
- 配置好虛擬機(jī)的靜態(tài) IP 地址
怎樣開啟 Hyper-V 和安裝 Centos7 虛擬機(jī),同時(shí)配置好虛擬機(jī)的靜態(tài) IP 地址迄本。這里就不再詳述硕淑,網(wǎng)上教程一大把,大家可以自行谷歌。
使用 Pyenv 管理多版本 Python
Centos7 自帶的 Python3 版本比較舊置媳,學(xué)習(xí)和實(shí)驗(yàn)自然選最新的版本了于樟,pyenv 這個(gè)工具滿足了我們這個(gè)需求。
首先安裝 Python 的依賴包拇囊,Pyenv 編譯 Python 時(shí)需要用到:
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
最后執(zhí)行:
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 環(huán)境就安裝好了迂曲。下面就是安裝最新版的 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)
? ~
現(xiàn)在我們的 Python 3.7.2 環(huán)境安裝好了,剩下的就是 pip 安裝需要的包:notebook寥袭。不熟悉 pyenv 的同學(xué)請自行補(bǔ)課路捧。
配置 jupyter-notebook 服務(wù)器
創(chuàng)建工作目錄
mkdir notebooks
創(chuàng)建的 /home/musan/notebooks
這個(gè)目錄用來放置所有的 notebooks 文檔。
下面創(chuàng)建登陸密碼:
~ 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'
>>>
下面準(zhǔn)備好 jupyter 啟動的配置文件
jupyter notebook --generate-config
這個(gè)命令會在我們的工作目錄創(chuàng)建一個(gè) ~/.jupyter/jupyter_notebook_config.py
配置文件传黄,我們根據(jù)需要修改以下配置項(xiàng):
c.NotebookApp.port = 8888
c.NotebookApp.ip = '0.0.0.0' # 這里使用默認(rèn)的 8888
c.NotebookApp.password = 'sha1:8ba6ed3ed711:8b9253b89af83513c9fe61bae8fbf2f3cd027a30' # 這個(gè)就是我們上面生成的密碼
c.NotebookApp.notebook_dir = '/home/musan/notebooks'
將 jupyter-notebook 加入服務(wù)列表
準(zhǔn)備好 Python 環(huán)境后鬓长,接著安裝好相應(yīng)的 jupyter 包,我們就可以開始愉快的玩耍了尝江。但是我是一個(gè)很懶的人涉波,我想要 jupyter notebook 自動跟隨系統(tǒng)啟動運(yùn)行。
sudo vi /usr/lib/systemd/system/jupyter.service
接下來準(zhǔn)備
[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 防火墻端口炭序,讓我們可以遠(yuǎn)程訪問服務(wù)器
sudo chmod 644 /usr/lib/systemd/system/jupyter.service
sudo firewall-cmd --zone=public --add-port=8888/tcp --permanent # 端口根據(jù)你上面的配置文件里的端口號啤覆,這里使用默認(rèn)的 8888
sudo firewall-cmd --reload
將 jupyter-notebook 加入系統(tǒng)服務(wù)列表并啟動后臺服務(wù)
sudo systemctl daemon-reload
sudo systemctl enable jupyter
sudo systemctl start jupyter
總結(jié)
到此,Jupyter 服務(wù)已經(jīng)配置好了惭聂,它將跟隨系統(tǒng)一起后臺啟動窗声,所有的 notebook 文檔都規(guī)整在統(tǒng)一的文件夾里,強(qiáng)迫癥減輕了不少 :)辜纲。本文主要介紹了 centos7 下使用最新版的 Python 方法笨觅,如何配置自定義服務(wù)的幾個(gè)步驟和要點(diǎn),介紹了 systemd 系統(tǒng)管理 xxxx.service 配置文件的創(chuàng)建耕腾,舉一反三见剩,今后再也不用去重復(fù)手動啟動后臺程序了。