pyenvで開発環境を構築する

2020年12月22日

Pythonで開発するときの鉄板ツール Pyenv を紹介します。

背景

ほとんどのOSにPythonはプリインストールされています。
Pyenvは標準でインストールされているPythonとは別の独立した実行ランタイムを作成・管理します。以下のような理由で利用されます。

  • 異なるPythonバージョンを使いたい
  • 開発プロジェクト毎にPython実行環境を分けたい
  • ライブラリのアップグレードテストをしたい
  • システム標準のPython環境を汚染したくない

Pyenv, pyenv-virtualenv をインストール

早速インストールします。
Macであればbrew installでも問題ありません。

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

PATHを通します。
$HOME/.bash_profile に以下を追記してターミナルを開き直します。

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

これだけです!

最新のPythonをインストールする

インストール可能な過去のPythonバージョンから最新まで調べることができます。本記事執筆時点で 3.9.1 が最新バージョンです。

$ pyenv install --list | grep 3.9
  3.9.0
  3.9-dev
  3.9.1
  miniconda-3.9.1
  miniconda3-3.9.1

データ分析屋さんが大好きなanacondaも用意されてます。

$ pyenv install --list | grep anaconda | tail
  anaconda3-5.1.0
  anaconda3-5.2.0
  anaconda3-5.3.0
  anaconda3-5.3.1
  anaconda3-2018.12
  anaconda3-2019.03
  anaconda3-2019.07
  anaconda3-2019.10
  anaconda3-2020.02
  anaconda3-2020.07

今回は普通のPython3.9.1をインストールします。
ソースからコンパイルされるので少々時間がかかります。

$ pyenv install 3.9.1

私の環境には3.8.3のenvが入っていました。今回新しく3.9.1がインストールされたことが確認できます。

$ pyenv versions 
* system (set by /Users/namacha/.pyenv/version)
  3.8.3
  3.8.3/envs/anotherpython
  3.8.3/envs/django-app
  3.8.3/envs/gatsby
  3.8.3/envs/neovim
  3.8.3/envs/numpy
  3.8.3/envs/testpython
  3.9.1            ← インストールされた!

Pyenv利用の一覧の流れ

ざっと一連の流れを。

# namachaという名前でPython3.9.1のエイリアスを作成する
$ pyenv virtualenv 3.9.1 namacha

# namacha に切り替える
$ pyenv activate namacha

# Pythonのバージョンが3.9.1になる
(namacha) $ python -V
Python 3.9.1

# ライブラリをインストールする
(namacha) $ pip install django

# ライブラリがインストールされたことを確認
(namacha) $ pip freeze
asgiref==3.3.1
Django==3.1.4
pytz==2020.4
sqlparse==0.4.1

# 別のPython3.9.1の実行環境をmugichaという名前で作成する
(namacha) $ pyenv virtualenv 3.9.1 mugicha

# mugichaの実行環境に切り替える
(namacha) $ pyenv activate mugicha

# mugichaはnamachaとは独立した環境なのでライブラリはインストールされていない
(mugicha) $ pip freeze

# mugicha からシステム標準のPythonに戻す
(mugicha) $ pyenv deactivate

# システムのPythonに戻った
$ python -V
Python 2.7.16

pyenv-virtualenvの機能を使ってPyenvでインストールしたPython3.9.1を複製し、namacha とmugicha のそれぞれ独立した実行環境を作成しました。namachaにはWeb開発フレームワークのDjangoをインストールしました。mugicha は namacha とは関係のないPython3.9.1のエイリアスとして扱われるので、Djangoはインストールされていません。

現在自分がどの実行環境を使っているかは、bashのコマンドラインの先頭に (namacha) とエイリアスの名前で識別可能です。

よく使うコマンドのおさらい

以下のコマンドを覚えておけば実利用の際は十分です。

コマンド用途
pyenv install新しいPythonバージョンのインストール
pyenv virtualenvPyenvでインストールしたPythonのエイリアスを作成
pyenv activatePython実行環境切り替え
pyenv deactivatePyenvの実行環境から抜け出す
pyenv versionsPyenvで管理している実行環境の一覧

実際の運用では

Web開発の本番環境では使いにくいです。PyenvはPythonをソースコードからgccビルドします。サーバの運用ポリシー的にgccを入れるのはNGという現場も多いかと。実運用では、Python自体は yum install しておいて、ランタイムの複製は Python3 標準機能としてバンドルされている venv を利用します。Pyenvはローカルの端末で開発環境として利用するのが主用途 と考えておくと良いでしょう。

それでは、良きPythonライフを!


Web系エンジニアでPython好き。バックエンド/フロントエンド問わずマルチな方面でエンジニアリングしています。