Overfiction

本とデジタルガジェットの感想を好きに語る

【メモ】超初心者のためのpyenvの使い方【Mac】

雰囲気でPythonの勉強をやっているのですが、pyenvを使うと、いろんなバージョンのPythonをインストールして自由に切り替えたりできるらしい。

仕組みはわからないが、変なモジュールを入れたりして環境がおかしくなってもなかったことにしてやり直したりできる。すげえ。

なお、ウチの環境はOS10.11(El Capitan)です。

pyenvを入れるための下準備

Xcodeをインストールする

Apple純正の統合開発環境。これがあるとMacやiOS用のアプリを作ったりできるが、そういうのを作らない人も、いろんなライブラリが使えるようになるのですごくいいらしい。AppStoreから普通にインストールできる。不安になるくらい時間がかかるが気にしない。

Xcode を Mac App Store で

インストールが終わったら、Terminalを開いて、下記コマンドを入力。

xcode-select --install

ポップアップが表示されてなんか聞かれるので不安になるが、気にせず「インストール」したり「同意」したりする。

上手くいかなかったら、ググるか詳しい人に聞く。

Homebrewをインストールする

macOS 用パッケージマネージャー。これがあると初心者ではインストールもままならない難しいソフトウェアが簡単に使えるようになってすごくいいらしい。公式ページにあるコマンドラインを打ちこむとインストールできる。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew — macOS 用パッケージマネージャー

インストールできなかったときは、こちらの記事が参考になる。

【El Capitan】Mac OSX 10.11にHomebrewインストール - Qiita

インストールできたら、Terminalでbrew doctorって打って、ちゃんと動いてるか確認する。

$ brew doctor
Your system is ready to brew.

となればOK。

上手くいかなかったら、ググるか詳しい人に聞く。

.bash_profileの編集

/usr/localにパスが通ってないと、Homebrewで入れたソフトが使えないのでどうにかする。パス(PATH)は小道の意味ですかね。

PATHを通すとは? (Mac OS X) - Qiita

パスが通ってるかどうかの確認
$ echo $PATH

表示結果に /usr/local/bin があればOK。

なかった場合、.bash_profileというファイルでどうにかする。

.bash_profileはただのテキストファイルだが、頭に「.」がついてるのでファインダーに表示されなかったりして面倒くさい。(表示できるようにする方法もある → Macで隠しファイルを表示する方法 - Qiita

.bash_profileが存在するか確認

Terminalで

$ cd
$ ls -a

表示結果に .bash_profile があればOK。

.bash_profileがなかったら作る

Terminalで

$touch .bash_profile
.bash_profileに追記する

Terminalで

$ echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

一旦Terminalを終了して開き直す(または$ source ~/.bash_profileを入力してTerminalに無理やり読みこませる)。

パスが通っていることを確認。

$ echo $PATH

表示結果に /usr/local/bin があればOK。

失敗してしまった場合
$open .bash_profile

普段使ってるテキストエディタで.bash_profileが開くので修正できる。

上手くいかなかったら、ググるか詳しい人に聞く。

pyenvのインストール

Homebrewをアップデートしておく。

よくわからないが、最初にこれをやっておくといいらしい。

$ brew update

pyenvとvirtualenvのインストール

ようやく念願のpyenvを手に入れたぞ! virtualenvというのはよくわからないが、virtualは仮想+envはenvironment(環境)でカッコいいからすごくいいものに違いない。

$ brew install pyenv
$ brew install pyenv-virtualenv

pyenvにパスを通す

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

Terminalを一旦閉じて開き直すと、pyenvが使えるようになってるはず。

新しいPythonのインストール

pyenvでインストール可能なPythonのバージョンを確認する。

$ pyenv install --list

すごくいっぱい表示される。うれしい。anacondaも選べる。

好きなバージョンを選んでインストールする。

$ pyenv install 3.6.1

間違えたり不要になったときは、installをuninstallに変えて実行する。

インストールしたPythonの確認

$ pyenv versions
$ pyenv versions
* system (set by /Users/[ユーザー名]/.pyenv/version)
  2.7.13
  3.6.1

「*」がついてるやつが、優先的に使われるバージョン(上記の場合はシステム標準のもの)。

Pythonのバージョンの切り替え

pyenv global x.x.x  #システム全体で使いたい場合
pyenv local x.x.x  #カレントディレクトリだけで使いたい場合
pyenv shell x.x.x  #一時的に使いたい場合。ターミナルを閉じて再度開いた場合は無効化。
pyenv global system  #システム標準の状態に戻す

例)ホームディレクトリに「Python3」というフォルダを作って、その中でだけPython3系を使いたい場合。

$ python --version  #現在使っているPythonのバージョンを確認
Python 2.7.13

$ mkdir ~/Python3  #Python3というフォルダを作成
$ cd ~/Python3  #新しいフォルダに移動する
$ pyenv local 3.6.1  #そのフォルダ内だけで使うPythonのバージョンを指定

$ python --version  #使っているPythonのバージョンを確認
Python 3.6.1

これでPython2系とPython3系を簡単に切り替えられるようになりました。やったー!

pyenvを入れたらbrew doctorで警告が出た(恐い)

よくわからないが恐いのでなんとかする。

pyenv をインストールしてると brew doctor で出る Warning を消す方法 - Qiita 【Homebrew】brew doctorのWarning対処方法 (その3) + envコマンドについて - TASK NOTES

よくわからないが、たぶんこんな感じ。

echo 'alias brew="PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin brew"' >> .bash_profile 

または

echo 'alias brew="env PATH=${PATH/\/Users\/[ユーザー名]\/\.pyenv\/shims:/} brew"' >> .bash_profile

virtualenvを使った複数バージョンの管理

バージョンの異なるPythonを簡単に切り替えられるpyenvですが、バージョンの同じPythonはひとつしかインストールできません。なので、うっかり変なモジュールを入れたりして最新安定版のPythonが壊れたらとても困る。

そこでvirtualenvを使うと、pyenvでインストールしたPythonを使って、使用するライブラリなども含めた新しい環境を仮想的に作ったり消したりできてすごく便利らしい。

virtualenv用のパスを通してやる

echo 'eval "$(pyenv virtualenv-init -)"' >> .bash_profile

仮想環境で使う用のPythonを作成する

まずはインストールされているPythonのバージョンを確認する。

$ pyenv versions
* system (set by /Users/[ユーザー名]/.pyenv/version)
  3.6.1

3.6.1を元に、「test_3.6.1」という名前の仮想環境用Pythonを作成

$ pyenv virtualenv 3.6.1 test_3.6.1

Pythonが増えた!

$ pyenv versions
* system (set by /Users/[ユーザー名]/.pyenv/version)
  3.6.1
  3.6.1/envs/test_3.6.1
  test_3.6.1

プロジェクトフォルダ作成

$ mkdir ~/test  #ディレクトリを作る
$ cd ~/test  #作ったディレクトリに移動
$ pyenv local test_3.6.1  #ディレクトリ限定で仮想環境用Pythonをデフォルトに
$ python --version
Python 3.6.1

#仮想環境になっているかどうか確認
$ pyenv versions
  system
  3.6.1
  3.6.1/envs/test_3.6.1
* test_3.6.1 (set by /Users/[ユーザー名]/[フォルダ名]/.python-version)

#プロジェクトフォルダの外には影響はない
$ cd
$ python --version
Python 2.7.13

やったね!

仮想環境の削除

$ pyenv uninstall test_3.6.1

本当に削除してもいいか聞かれるので不安になるが、「y」を入力。

$ pyenv versions
* system (set by /Users/[ユーザー名]/.pyenv/version)
  3.6.1

仮想環境用のPythonが消えた!

なお、仮想環境を使わないときは、うちの.bash_profileは、virturalenvに関する部分をコメントアウトしてある。シェルの反応がすごく遅くなるので。

#eval "$(pyenv virtualenv-init -)"

そのほか参考にさせてもらったサイトなど

ありがとうございました。