LoginSignup
1
2

More than 3 years have passed since last update.

[詳細版] Google Compute Engine (Ubuntu 16.04) で快適なPython環境作り

Last updated at Posted at 2020-03-24

概要

本記事では,GCEのUbuntuにおいて,Python環境を作ります.
(vimの設定等は適宜ご自身で行ってください.)
具体的にやることは以下です.

  • サービスアカウント→ユーザーアカウントに変更
  • zshを入れる
  • Pythonを入れる
  • Powerline-shellでカスタマイズ
  • Jupyter notebookを使えるようにする
  • Stackdriver Monitoring Agentを入れる.

初期設定

初期状態では,サービスアカウントが内部で使われます.
色々と面倒なので,自分のユーザーアカウントでログインしておくことを推奨します.

gcloud init

色々聞かれるので,言われたとおりに認証して,verification codeを貼ります.

zshの導入

まず,zshをinstallします.

sudo apt-get install zsh -y

その後,デフォルトのshellをzshにしたいのですが,パスワードがわからないため, chshコマンドが動きません.(やり方あったら教えて欲しい)
そのため,

vim ~/.bashrc

などでbashrcを開いて,末尾に

exec /usr/bin/zsh

を挿入します.これでデフォルトのshellがzshになりました.

oh-my-zshを入れる

続いて,oh-my-zshを入れます.
(個々人のこだわりがあるかと思うので,こだわりのあるかたは Python環境の構築 までスキップしてください.)

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

デフォルトのシェルを変えるかみたいなこと聞いてきますが当然 no にしてください.

外部プラグインとして,以下を入れます.

  • zsh-syntax-highlight
  • zsh-autosuggest
  • zsh-history-substring-search
  • zsh-completions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-history-substring-search ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-history-substring-search
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions

一旦ここで,zshrcを変更しましょう.

~/.zshrc
export ZSH="${HOME}/.oh-my-zsh"
ZSH_THEME="candy"
plugins=(
  git pip pyenv virtualenv zsh-syntax-highlighting zsh-autosuggestions history-substring-search zsh-completions
)
source $ZSH/oh-my-zsh.sh

編集したら,一旦読み込みます.

source ~/.zshrc

Python環境の構築

pyenvとvirualenvを使ったよくある仮想環境構築を行います.
まずは,pyenvとvirtualenvをインストールします.

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
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
source ~/.zshenv
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshenv
source ~/.zshenv

好きなバージョンのPythonをインストールします.
例えばこのような感じ.

pyenv install 3.6.5
pyenv virtualenv 3.6.5 default_env
pyenv global default_env

powerline-shellのインストール

ここもこだわりがある人はSkipしてください.
まず,現在の仮想環境にpowerline-shellを入れます.

pip install powerline-shell

その後,再びzshrcを以下のように編集してください.

~/.zshrc
export ZSH="${HOME}/.oh-my-zsh"
ZSH_THEME="candy"

function powerline_precmd() {
    PS1="$(powerline-shell --shell zsh $?)"
}
function install_powerline_precmd() {
  for s in "${precmd_functions[@]}"; do
    if [ "$s" = "powerline_precmd" ]; then
      return
    fi
  done
  precmd_functions+=(powerline_precmd)
}
if [ "$TERM" != "linux" ]; then
    install_powerline_precmd
fi

plugins=(
  git pip pyenv virtualenv zsh-syntax-highlighting zsh-autosuggestions history-substring-search zsh-completions
)
source $ZSH/oh-my-zsh.sh

export LC_ALL="en_US.UTF-8"
export LANG=ja_JP.UTF-8

#---------------------- 以下,私的設定なので割愛してください ----------------------#
#historyファイル指定
HISTFILE=$HOME/.zsh-history
HISTSIZE=1000
SAVEHIST=10000

#コマンドじゃなければ cd する
setopt auto_cd
# 補完候補を一覧表示
setopt auto_list
# TAB で順に補完候補を切り替える
setopt auto_menu
# カッコの対応などを自動的に補完
setopt auto_param_keys
# ディレクトリ名の補完で末尾の / を自動的に付加し、次の補完に備える
setopt auto_param_slash
# コマンドミスった時のcorrect
setopt correct
# 補完候補一覧でファイルの種別をマーク表示
setopt list_types
# 明確なドットの指定なしで.から始まるファイルをマッチ
setopt globdots
# ファイル名の展開でディレクトリにマッチした場合 末尾に / を付加
setopt mark_dirs
# 語の途中でもカーソル位置で補完
setopt complete_in_word
# カーソル位置は保持したままファイル名一覧を順次その場で表示
setopt always_last_prompt
# ビープを鳴らさない
setopt nobeep
# vcs有効化
setopt prompt_subst
# #以降をコメントとして扱う
setopt interactive_comments
# ヒストリの共有
setopt share_history
# ヒストリに追加されるコマンドが古いものと同じなら古いものを削除
setopt hist_ignore_all_dups

更にカスタマイズします.

mkdir -p ~/.config/powerline-shell && powerline-shell --generate-config > 

以下の2ファイルを作成します.

~/.config/powerline-shell/original_color.py
from powerline_shell.themes.default import DefaultColor


class Color(DefaultColor):
    USERNAME_FG = 15
    USERNAME_BG = 4
    USERNAME_ROOT_BG = 1

    HOSTNAME_FG = 15
    HOSTNAME_BG = 10

    HOME_SPECIAL_DISPLAY = False
    PATH_FG = 15
    PATH_BG = 70
    CWD_FG = 231
    SEPARATOR_FG = 0

    READONLY_BG = 1
    READONLY_FG = 7

    REPO_CLEAN_FG = 14
    REPO_CLEAN_BG = 0
    REPO_DIRTY_FG = 3
    REPO_DIRTY_BG = 0

    JOBS_FG = 4
    JOBS_BG = 8

    CMD_PASSED_FG = 255
    CMD_PASSED_BG = 136
    CMD_FAILED_FG = 255
    CMD_FAILED_BG = 1

    SVN_CHANGES_FG = REPO_DIRTY_FG
    SVN_CHANGES_BG = REPO_DIRTY_BG

    VIRTUAL_ENV_BG = 31
    VIRTUAL_ENV_FG = 231

    AWS_PROFILE_FG = 7
    AWS_PROFILE_BG = 2

    TIME_FG = 255
    TIME_BG = 246
~/.config/powerline-shell/config.json
{
    "segments": [
        "virtual_env",
        "aws_profile",
        "ssh",
        "cwd",
        "git",
        "git_stash",
        "jobs",
        "read_only",
        "newline",
        "set_term_title",
        "svn",
        "time",
        "exit_code"
    ],
    "cwd": {
        "max_depth": 4,
        "max_dir_size": 10,
        "full_cwd": 1
    },
    "mode": "patched",
    "theme": "~/.config/powerline-shell/original_color.py"
}

注意

  • 仮想環境内にpowerline-shellがないとおかしくなりますので毎回 pip install してください.
  • 文字化けする場合は,以下を参考にフォントを入れるとなおります.(自分はRoboto Mono for Powerlineを使ってます)

Jupyter Notebookの設定

そのままだとJupyterが使えないので設定します.
以下のサイトのjupyterの設定以降を行えばJupyterを使えます.
参考:https://rf00.hatenablog.com/entry/2018/01/01/160820

sshが切れるとJupyterが落ちちゃうので,tmuxを立ててその中でJupyterを使うことを推奨します.

Stack Driver Monitoring Agentを入れる

GCEのリソース監視にStack Driver Monitoring Agentをお勧めします.
入れると詳しいメモリー使用率などがこちらの右上のHOSTタブの隣のAgentタブから確認できるようになります.
(ただし,別途課金がかかるので注意)

公式の通りにインストールします.
デフォルトだと1分ごとにデータを送信しますが,課金量が気になるので3分毎にデータを送信するように変更します.

sudo vim /etc/stackdriver/collectd.conf
/etc/stackdriver/collectd.conf
Interval 180  # Interval 60から変更

# 以下変更なし
sudo service stackdriver-agent restart
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2