pyenv, venv, direnvによるPython3環境構築

最近、会社で機械学習系のハンズオンが実施されたのと、Mojaveをクリーンインストールしたこともあって、Python3の環境構築を仮想環境含めて見直してみることにしました。

概要

本記事は「ほとんど2系を使うことが無い」という人向けです。以前は2系もたまに使ってたので pyenv-virtualenv など使ってましたが、最近はほとんど3系しか使うことがなくなったので、仮想環境についてはPython3に実装されている venv でやります。

万が一2系を使うことがあったとしても、 2.7.10 以外を使うことはほぼ無いし、2.7.10 の仮想環境をいくつも作ることは無い(はず)なので、必要なときだけ pyenv でMacに最初からインストールされてる 2.7.10 に切り替える方式です。

  • Python2 および Python3 の各バージョンの切り替え
    • pyenv globalで設定
  • Python3 の仮想環境
    • venvで仮想環境の作成
    • direnv でディレクトリへの出入りによる自動切り替え

準備

インストールするもの

全部 Homebrew で管理します。

  • Homebrew
    • /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • pyenv
    • brew install pyenv
  • direnv
    • brew install direnv
  • ~/.zshrcに以下を追記
eval "$(pyenv init -)"
eval "$(direnv hook zsh)"

Python3のインストール

  • pyenv install --list | less
    • バージョンの確認
  • pyenv install 3.6.7
    • 3系の好きなバージョンを入れる
  • pyenv global 3.6.7
  • which python
    • /Users/okash1n/.pyenv/shims/python
  • python --version
    • Python 3.6.7
  • pyenv versions
  system
* 3.6.7 (set by /Users/okash1n/.pyenv/version)

仮想環境の作成

  • pwd
    • /Users/okash1n
  • python -m venv my-venv-test
  • cd ~/my-venv-test
  • ls
    • bin include lib pyvenv.cfg
  • vi .envrc
source ./bin/activate

ここでdirenv allowすると .envrc が読み込まれ、 my-venv-testの仮想環境が activate されます。たま、別のディレクトリに移動すると自動で deactivate されます。

仮想環境ごとにパッケージが管理出来ているか確認

pandasの環境

  • python -m venv ~/pandas-venv
  • cd ~/pandas-venv
  • touch .envrc
  • echo "source ./bin/activate" > .envrc
  • direnv allow
  • pip install pandas
  • pip freeze
numpy==1.15.4
pandas==0.23.4
python-dateutil==2.7.5
pytz==2018.7
six==1.11.0
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

awscliの環境

  • cd
  • pip freeze
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
  • python -m venv ~/awscli-venv
  • cd ~/awscli-venv
  • touch .envrc
  • echo "source ./bin/activate" > .envrc
  • direnv allow
  • pip install awscli
  • pip freeze
awscli==1.16.52
botocore==1.12.42
colorama==0.3.9
docutils==0.14
jmespath==0.9.3
pyasn1==0.4.4
python-dateutil==2.7.5
PyYAML==3.13
rsa==3.4.2
s3transfer==0.1.13
six==1.11.0
urllib3==1.24.1
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

ディレクトリを移動するだけで、仮想環境が変更出来ていることが確認出来ました。

おまけ

direnvについて

direnv 自体は .envrcがあるディレクトリに移動した際に、そのスクリプトの内容を読み込むというシンプルな機能である為、例えば pip list を書いておくと仮想環境に入った際にインストールされているパッケージを出力したり出来ます。

参考: direnvを使おう - Qiita

python2 を使いたいとき

  • pyenv global system
  • python --version
    • Python 2.7.10

今後やりたいこと

python -m venv my-venv した後に .envrc を勝手に作って direnv allowしたり.gitignore も勝手に作ってくれるようにしたい

Share Comments
comments powered by Disqus