pyenv
python3
Jupyter
Anaconda
JupyterLab

pyenv+anaconda+jupyterlab(+リモート接続許可設定)環境構築

前提

pyenvの導入前にgitの導入を済ませておきます。
CentOS7に最新版のgitを導入してみた

pyenvの導入

【参考URL】
pyenv git

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
source ~/.bash_profile
exec $SHELL -l

pyenv —version
# > pyenv 1.2.1-7-gf114557

最新版のanacondaを導入

pyenv install -l
pyenv install anaconda3-5.0.1
pyenv versions # 導入済みバージョンの表示
pyenv global anaconda3-5.0.1
python —version
# > Python 3.6.3 :: Anaconda, Inc.
jupyter —version
# > 4.3.0

jupyter labのリモート接続設定

最新版のanacondaを導入したらjupyter labがデフォルトで導入されていたのでjupyter labの導入は割愛。

pip install --upgrade jupyter # upgradeしておかないとうまくサーバと接続できなかった
jupyter notebook --generate-config # jupyterのconfigファイルを生成

# ipythonを起動し、下記のようにshaのパスワードを生成する
ipython
In [1]: from IPython.lib import passwd
In [2]: passwd()
# パスワードを打ち込むとハッシュ値が生成(sha1:XXXXXXX)されるので、適当なエディタにコピーしておく
~/.jupyter/jupyter_notebook_config.py
# ファイル末尾に下記を追記
c.IPKernelApp.pylab = 'inline'
c.NotebookApp.ip = '*' # 接続元のIP許可設定
c.NotebookApp.open_browser = False
c.NotebookApp.port = 9999 # 起動時のポート番号
c.NotebookApp.password = u'sha1:XXXXXXX(ハッシュ値をここに記載)'

firewalldでファイアウォールの穴あけを行う。

firewall-cmd --list-all-zone --permanent # 事前情報の確認
firewall-cmd --zone=public --add-port=9999/tcp --permanent # 9999番ポートを許可
firewall-cmd --list-all-zone --permanent # publicゾーンに9999ポートの許可設定が追加されているか確認
firewall-cmd --reload # 設定の反映

ここまでの設定で起動できるか確認しておく。
http://xx.xx.xx.xx:9999で接続してみる。

jupyterlabの設定

ホームディレクトリの設定

~/.jupyter/jupyter_notebook_config.py
# 下記部分ににパスを記述
c.NotebookApp.notebook_dir = ''

テーマの変更

目に優しいDarkに変えてみた。
File>Settings>Themeの記述を下記のように変更する。
スクリーンショット 2018-02-03 22.53.12.png

フォントの細かい配色設定は下記ファイルを編集すればよい。
/root/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/jupyterlab/themes/jupyterlab-theme-dark-extension/variables.css

variables.css
  /* Code mirror specific styles */

  --jp-mirror-editor-keyword-color: var(--md-green-500);
  --jp-mirror-editor-atom-color: var(--md-blue-300);
  --jp-mirror-editor-number-color: var(--md-green-400);
  --jp-mirror-editor-def-color: var(--md-blue-600);
  --jp-mirror-editor-variable-color: var(--md-grey-300);
  --jp-mirror-editor-variable-2-color: var(--md-grey-500);
  --jp-mirror-editor-variable-3-color: var(--md-grey-600);
  --jp-mirror-editor-punctuation-color: var(--md-blue-400);
  --jp-mirror-editor-property-color: var(--md-blue-400);
  --jp-mirror-editor-operator-color: #AA22FF;
  --jp-mirror-editor-comment-color: #408080;
  --jp-mirror-editor-string-color: #BA2121;
  --jp-mirror-editor-string-2-color: #f50;
  --jp-mirror-editor-meta-color: #AA22FF;
  --jp-mirror-editor-qualifier-color: #555;
  --jp-mirror-editor-builtin-color: var(--md-green-600);
  --jp-mirror-editor-bracket-color: #997;
  --jp-mirror-editor-tag-color: var(--md-green-700);
  --jp-mirror-editor-attribute-color: var(--md-blue-700);
  --jp-mirror-editor-header-color: var(--md-blue-500);
  --jp-mirror-editor-quote-color: var(--md-green-300);
  --jp-mirror-editor-link-color: var(--md-blue-700);
  --jp-mirror-editor-error-color: #f00;
  --jp-mirror-editor-hr-color: #999;