リーマンエンジニアの生活日誌

メーカで働くソフトウェアエンジニアのオフ活動

Macにpyenv-virtualenvをセットアップして複数バージョンのPython環境を構築する

ディレクトリ毎に異なるpyenv環境を構築できるので、version依存を気にすることなくpipでパッケージインストールが可能になる
(バージョン依存から解き放たれたい時に使う。)

環境

macOS 10.14.1 Mojave

pyenv-virtualenvインストール

$ brew update
$ brew install pyenv-virtualenv

パッケージインストール完了後、~/.bash_profileに以下を追記

export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi

環境変数の変更内容を反映

$ source ~/.bash_profile

使い方

インストール可能なPythonのバージョン確認

$ pyenv install --list

でインストール可能なPythonのバージョン、ディストリビューションが表示される。

Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.4
  ...
  2.7.15
  ...
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.8-dev
  ...

Pythonのインストール方法

例えば、Python 2系の一番新しいやつ(ver.2.7.15)を入れたい場合は

$ pyenv install 2.7.15
  • 以下のエラーが出る場合

      Installing Python-2.7.15...  
      python-build: use readline from homebrew  
      ERROR: The Python zlib extension was not compiled. Missing the zlib?  
    
      Please consult to the Wiki page to fix the problem.  
      https://github.com/pyenv/pyenv/wiki/Common-build-problems  
    

    Xcode cliが入ってなければ、
    $ xcode-select --install
    でインストールを実施。すでに入っている場合は、~/.bash_profileに
    export CFLAGS="-I$(xcrun --show-sdk-path)/usr/include"
    を追加して、source ~/.bash_profileを行い再実行するとインストールできる

インストールされているPythonのバージョン確認

$ pyenv versions
* system (set by /Users/user_name/.pyenv/version)
  2.7.15
  3.7.2

virtualenv仮想環境を作成

pythonのバージョン2.7.15で、testという名称の仮想環境を作成する場合

$ pyenv virtualenv 2.7.15 test

$ pyenv versions
* system (set by /Users/user_name/.pyenv/version)
  2.7.15
  3.7.2
  test

virtualenvの仮想環境を特定のディレクトリ上に構築

環境を作りたいディレクトリを作成し、作成したディレクトリに移動

$ mkdir ~/python/test
$ cd ~/python/test

ディレクトリ内では、先ほど作成したtestという名の仮想環境を使いたい場合

$ pyenv local test

# pythonのバージョンを確認
(test) $ python -V
Python 2.7.15
  • pythonのバージョンが変わらない場合
    ~/.bash_profileにpyenvのPATHを追加
    export PATH="$HOME/.pyenv/shims:$PATH"
    変更内容を適用し、再度バージョン確認を試みる
    source ~/.bash_profile

参考URL

codelab.website

ensekitt.hatenablog.com

gappy.hateblo.jp

qiita.com