kick the base

Houdiniと、CG技術と、日々のこと。

コマンドライン for デザイナー3 -pyenv編

「コマンドライン for デザイナー」のお話も今回で最終回となりました。本日はPythonの開発環境を整えていきます。*1

  1. ターミナルって何?
  2. Homebrewって何?
  3. pyenvって何?

今回はpyenvについてご説明します。実際にPythonのバージョンをプロジェクトごとに切り替えてみましょう!

pyenvとはなにか

pyenvというのは異なったバージョンのPythonを簡単に切り替えることができるツールです。

pyenvと一緒に紹介されることが多いツールにvirtualenvというものがあるのですが、ぼくは

  1. pyenvを理解する
  2. virtualenvを理解する

の順に学んだほうが混乱が少ないと思いますのでここでは割愛します。

ちなみに本記事であつかうpyenvですが、本日現在Windowsには対応していません。

pyenvはシンプルで分かりやすいので初学者には一押しなのですが、WIndowsユーザはanaconda(miniconda)と言うものを使うと良いでしょう。*2

異なったバージョンのPythonを切り替えるってどういうこと?

実はMacには初期状態からPython2系がインストールされており、ターミナルを起動しておもむろに下記コマンドを実行するとシステムに入っているPythonのバージョンが表示されます。

$ python --version

Pythonが元から入っているなんてなんてフレンドリー!このまま使い続けよう!と言ってもいいんですが、例えばBlenderのスクリプトを書こうと思ったときはどうしましょう。執筆時現在Blenderはバージョン2.78で、Pythonのバージョンは3.5.1に対応しています。

Download Python | Python.org

ここからPython3系のパッケージをダウンローしてきてインストールしても良いですが、2系と3系を行ったり来たり、2系の中でも2.6系と2.7系で開発したいなんてこともあるでしょう。

そんなとき、pyenvが大活躍するのです!

pyenvをインストールしよう

そういえば様々なパッケージを一元管理するツールがあるとどこかで聞きました。

そう、Homebrewです!

Homebrewはインストール済みという前提でpyenvをインストールしてみましょう。と言っても下記1行のコマンドです。*3

$ brew install pyenv

インストールはこれで完了!簡単ですね。ただ、ここからひとつだけ山場があります。ちょっとだけ難しいですが頑張りましょう。

環境変数を設定する

はい出ました環境変数。難しそうなやつです。慣れないと間違って書き込んじゃったらコンピューターが壊れちゃうんじゃないの…と心配になっちゃうやつです。

ご心配無用。全然難しくないですし、失敗してもすぐ直せます。

非常にざっくりと説明すると「コンピュータにコマンドのある場所を教えてあげること」を「環境変数を設定する」と言います。また全く同じ意味でパスを通すという言い方もあるので合わせて覚えておきましょう。

以下にbash/zsh、fishユーザー向けに設定を書いておきます。

bashユーザー

pyenvに関するパスの通し方は下記コマンド一発です。

$ export PATH="$HOME/.pyenv/bin:$PATH"

上記コマンドを実行したあと、続けて以下を事項するとpyenvが初期化され使えるようになります。

eval "$(pyenv init -)"

この2行を実行してあげれば使えるようになるのですが、毎回実行するのはめんどくさい。ターミナルを立ち上げた時(ログインした時)に使える状態になっていたら楽ですよね。

そこで、bashユーザーなら下記2行を.bash_profileまたは.bashrcのどちらかに書き込みましょう。*4

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

.bashrc.bash_profileの保存場所はホームディレクトリ直下です。

ホームディレクトリとは~と表現され、/Users/ユーザ名のことを指します

Macはドットで始まるファイルは不可視ファイルとなるため、書き込み・読み込みの際は注意しましょう。

zshユーザー

パスの通し方と初期化についてはbashと同じコマンドでOKです。書き込む設定ファイルだけ異なりますのでご注意ください。

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

上記を.zshrcに記載しましょう。保存場所はホームディレクトリ直下です。

fishユーザー

fishは記述がかなり異なりますね。

status --is-interactive; and . (pyenv init -| psub)
set -x PATH $HOME/.pyenv/shims $PATH 

こちらを~/.config/fish/config.fishに記載しましょう。

コマンドの解説

環境変数の設定、ちょっとややこしかったですね。まあファイルに書き込む作業自体は一回だけなので大変なのは最初だけです。以下にpyenvの使い方を説明します。

最初にさらっとよく使うコマンドを説明し、続けて実際の使用例を説明しましょう。

インストールできるバージョンの一覧を表示

$ pyenv install -l

実行するとズラッと出てきますね。この中から好きなものをインストールしましょう。

特定のバージョンをインストール

$ pyenv install 3.5.2

例として3.5.2をインストールしてみました。簡単ですね。

現在インストール済みのバージョン一覧を表示する

$ pyenv versions

実行してみると下記のような表示になるかと思います。

  system
* 2.7.10 (set by /Users/ユーザー名/.pyenv/version)
  3.4.3
  anaconda3-2.4.0

現在使用しているバージョンに*マークが表示されています。

現在使用しているバージョンのみ表示

$ pyenv version

標準出力はお察しの通りこんな感じになります。

2.7.10 (set by /Users/ユーザー名/.pyenv/version)

デフォルトで使用するバージョンを指定する

$ pyenv global 2.7.10

上記コマンドを入力することで、デフォルトで使用するバージョンを2.7.10に指定することができます。

ちなみにあとで実例をお見せしますが、localオプションを使うとデフォルトよりそのバージョンが優先されます。

実際に使ってみよう

デスクトップに3dapp_scriptsというディレクトリを作り、blender_projectディレクトリでは3.5.1を、maya_projectディレクトリでは2.7.11を使用するように環境を整えてみましょう!

MayaとBlenderを想定しましたが、3DCGと関係がないクラスタの方は単純にバージョンを切り替える例としてご覧ください

3dapp_scripts
├── blender_project
└── maya_project

ふたつのバージョンのインストール

  • $ pyenv install 2.7.11
  • $ pyenv install 3.5.1

上記ふたつのコマンドを実行しましょう。現状ぼくの環境ではこのような感じになりました。

$ pyenv versions
  system
* 2.7.10 (set by /Users/ユーザー名/.pyenv/version)
  2.7.11
  3.4.3
  3.5.1
  anaconda3-2.4.0

すでにインストールされていた余分なやつもいますが、2.7.11と3.5.1がいればOKです。

maya_projectでバージョンの設定を行う

デフォルト設定ではなくプロジェクト単位で設定を行うため、localオプションを使用します。

  1. $ cd ~/Desktop/3dapp_scripts/maya_project/
  2. $ pyenv local 2.7.11

cdコマンドは「カレントディレクトリ」を意味し、ディレクトリの移動をするコマンドです。maya_projectディレクトリに移動したあと、Pythonのバージョンを2.7.11に設定したということです。

blender_projectでバージョンの設定を行う

続けてBlenderのプロジェクト設定もしてみましょう。

  1. $ cd ../blender_project/
  2. $ pyenv local 3.5.1

ひとつ前の工程でmaya_projectにいたので、../blender_projectと相対パスを使って移動しました。

あとは先程の手順と変わりませんね。

バージョンが切り替わっているか実際に確かめてみる!

f:id:kickbase:20161012021209g:plain

操作動画のとおりですが、cdでディレクトリを移動するだけでPythonのバージョンが変わっているのがわかりますね!

本動画ではpython --versionでバージョン確認をしていますが、もちろんpyenv versionでもpyenv versionsでも確認を行うことができます。

バージョン切り替え、難しくなかったと思います。これで様々なバージョンを行き来して開発が可能になりました!

direnv、anyenvについて

Pythonの開発のみをしているのでよければpyenvで事足りるのですが、RubyのrbenvやPerlのplenv、Nodejsのnodebrewなど様々な環境をひとつのツールで切り替えたい場合はdirenvやanyenvというツールがHotらしいです。

ぼくは使ったことがありませんが、ご興味があれば調べてみてはいかがでしょうか。

まとめ

ターミナルに始まりHomebrew、pyenvと説明を行ってきました。

デザイナーやアーティストのみなさんが、あれ?おもったより難しくなさそうと思っていただければこれにまさる喜びはありません。

ぼくもデザイナーですが、黒い画面を使うようになってクリエイティブな時間が増えました。

単純作業や繰り返し作業はコンピュータに任せて、モノづくりの時間をもっと増やしていきましょう。

fish-shell盛り上げたい勢としての独り言

fish-shellはデフォルト設定のままでも十分現場投入できるシェルだと思うので、今後ブログにも引き続き書いていきたいと思っています。

現状シンタックスハイライトが対応していないためzshのハイライトを当てていますが、fish-shellに対応してくれたらハッピーだなぁと思います。

お題「シンタックス・ハイライト機能で対応してほしい言語」

*1:もちろん開発環境構築にはpyenv以外にも様々な知識が必要になりますが、最初の一歩ということで。

*2:筆者はPython開発環境はMacのためここでは割愛しますが、anaconda自体はMacでも使用できますし、個人的には使用しています

*3:pyenv自体はHomebrew経由でなくてもインストール可能ですが、管理が楽なのでHomebrewでインストールするのが良いでしょう。

*4:このふたつの設定ファイルは実行されるタイミングが異なるのですが、詳しい説明は割愛します