色々学習したい事を実現する為にPythonの実行環境を整えるのと併せて、折角ならば開発環境としてもちゃんと整備しておきたい、効率的にコーディングしたいという事で手持ちの環境(Intellij IDEA Ultimate Edition)と統合して行こうじゃないか、という事で当エントリの内容を纏めるに至りました。
実現したいこと
- 新調したMacbook(無印:macOS Sierra)にPythonの実行環境をpyenvとvirtualenvとpyenv-virtualenvで綺麗に揃え、整えたい
- Python2.7系/Python3.x系/その他各種分析・機械学習用のライブラリを適宜切り替えて使いたい
- 切り替えた環境をIntellij IDEA(Ultimate Edition)の環境と連動させてIDE上でPythonコードをがしがし書いて行きたい
参考情報
以下の各種エントリを大いに参考にさせて頂きました。ありがとうございます。
- [Python]pyenvとvirtualenvとpyenv-virtualenv - dackdive's blog
- pyenv 利用のまとめ - Qiita
- IntelliJ IDEAのPythonプラグインからもvirtualenvが使える - Qiita
- [Python] pyenv + IntelliJ IDEA での開発環境構築 | Developers.IO
実践手順
事前準備・作業前の状況
導入する環境は買ったばかりのMacbook無印 OS:macOS Sierra。 Pythonについては初期状態で下記のバージョンのものが導入されていました。
$ python --version
Python 2.7.10
Gitについても購入時点の環境で下記バージョンのものが導入済の状態。
$ git --version git version 2.10.1 (Apple Git-78)
以下のコマンドでbrewのアップデートも兼ねてgitをアップグレード。(あ、ちゃんと🍺 マークが表示されてる!)
$ brew update $ brew upgrade $ brew install git ==> Downloading https://homebrew.bintray.com/bottles/git-2.11.0.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring git-2.11.0.sierra.bottle.tar.gz ==> Caveats Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions zsh functions have been installed to: /usr/local/share/zsh/site-functions Emacs Lisp files have been installed to: /usr/local/share/emacs/site-lisp/git ==> Summary 🍺 /usr/local/Cellar/git/2.11.0: 1,452 files, 32.4M $
...したつもりでしたがバージョンは変わらずでしたね。
$ git --version git version 2.10.1 (Apple Git-78)
pyenvとvirtualenvとpyenv-virtualenvのインストール
pyenvのインストール
pyenvのインストール:
$ brew install pyenv
$ pyenv --version
pyenv 1.0.6
切替可能なPythonバージョン一覧の表示:
$ pyenv versions * system (set by /Users/shinyaa31/.pyenv/version)
導入可能なバージョン一覧の確認:手元の環境では以下一覧が対象となっていました。
$ pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.5
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
2.5.6
2.6.6
2.6.7
2.6.8
2.6.9
2.7-dev
2.7
2.7.1
2.7.2
2.7.3
2.7.4
2.7.5
2.7.6
2.7.7
2.7.8
2.7.9
2.7.10
2.7.11
2.7.12
2.7.13
3.0.1
3.1
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.2-dev
3.2
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
3.3.0
3.3-dev
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.4.0
3.4-dev
3.4.1
3.4.2
3.4.3
3.4.4
3.4.5
3.5.0
3.5-dev
3.5.1
3.5.2
3.6.0
3.6-dev
3.7-dev
anaconda-1.4.0
anaconda-1.5.0
anaconda-1.5.1
anaconda-1.6.0
anaconda-1.6.1
anaconda-1.7.0
anaconda-1.8.0
anaconda-1.9.0
anaconda-1.9.1
anaconda-1.9.2
anaconda-2.0.0
anaconda-2.0.1
anaconda-2.1.0
anaconda-2.2.0
anaconda-2.3.0
anaconda-2.4.0
anaconda-4.0.0
anaconda2-2.4.0
anaconda2-2.4.1
anaconda2-2.5.0
anaconda2-4.0.0
anaconda2-4.1.0
anaconda2-4.1.1
anaconda2-4.2.0
anaconda3-2.0.0
anaconda3-2.0.1
anaconda3-2.1.0
anaconda3-2.2.0
anaconda3-2.3.0
anaconda3-2.4.0
anaconda3-2.4.1
anaconda3-2.5.0
anaconda3-4.0.0
anaconda3-4.1.0
anaconda3-4.1.1
anaconda3-4.2.0
ironpython-dev
ironpython-2.7.4
ironpython-2.7.5
ironpython-2.7.6.3
ironpython-2.7.7
jython-dev
jython-2.5.0
jython-2.5-dev
jython-2.5.1
jython-2.5.2
jython-2.5.3
jython-2.5.4-rc1
jython-2.7.0
jython-2.7.1b1
jython-2.7.1b2
jython-2.7.1b3
miniconda-latest
miniconda-2.2.2
miniconda-3.0.0
miniconda-3.0.4
miniconda-3.0.5
miniconda-3.3.0
miniconda-3.4.2
miniconda-3.7.0
miniconda-3.8.3
miniconda-3.9.1
miniconda-3.10.1
miniconda-3.16.0
miniconda-3.18.3
miniconda2-latest
miniconda2-3.18.3
miniconda2-3.19.0
miniconda2-4.0.5
miniconda2-4.1.11
miniconda3-latest
miniconda3-2.2.2
miniconda3-3.0.0
miniconda3-3.0.4
miniconda3-3.0.5
miniconda3-3.3.0
miniconda3-3.4.2
miniconda3-3.7.0
miniconda3-3.8.3
miniconda3-3.9.1
miniconda3-3.10.1
miniconda3-3.16.0
miniconda3-3.18.3
miniconda3-3.19.0
miniconda3-4.0.5
miniconda3-4.1.11
pypy-c-jit-latest
pypy-c-nojit-latest
pypy-dev
pypy-stm-2.3
pypy-portable-2.3.1
pypy-portable-2.4
pypy-portable-2.5
pypy-portable-2.5.1
pypy-stm-2.5.1
pypy-portable-2.6
pypy-portable-2.6.1
pypy-portable-4.0
pypy-portable-4.0.1
pypy-portable-5.0
pypy-portable-5.0.1
pypy-portable-5.1
pypy-portable-5.1.1
pypy-portable-5.3.1
pypy-portable-5.4
pypy-portable-5.4.1
pypy-portable-5.6.0
pypy-1.5-src
pypy-1.5
pypy-1.6
pypy-1.7-dev
pypy-1.7
pypy-1.8-dev
pypy-1.8
pypy-1.9-dev
pypy-1.9
pypy-2.0-dev
pypy-2.0-src
pypy-2.0
pypy-2.0.1-src
pypy-2.0.1
pypy-2.0.2-src
pypy-2.0.2
pypy-2.1-src
pypy-2.1
pypy-2.2-src
pypy-2.2
pypy-2.2.1-src
pypy-2.2.1
pypy-2.3-src
pypy-2.3
pypy-2.3.1-src
pypy-2.3.1
pypy-2.4.0-src
pypy-2.4.0
pypy-2.4-beta1-src
pypy-2.4-beta1
pypy-2.5.0-src
pypy-2.5.0
pypy-2.5.1-src
pypy-2.5.1
pypy-2.6.0-src
pypy-2.6.0
pypy-2.6.1-src
pypy-2.6.1
pypy-4.0.0-src
pypy-4.0.0
pypy-4.0.1-src
pypy-4.0.1
pypy-5.0.0-src
pypy-5.0.0
pypy-5.0.1-src
pypy-5.0.1
pypy-5.1-src
pypy-5.1
pypy-5.1.1-src
pypy-5.1.1
pypy-5.3-src
pypy-5.3
pypy-5.3.1-src
pypy-5.3.1
pypy-5.4-src
pypy-5.4
pypy-5.4.1-src
pypy-5.4.1
pypy-5.6.0-src
pypy-5.6.0
pypy2-5.3-src
pypy2-5.3
pypy2-5.3.1-src
pypy2-5.3.1
pypy2-5.4-src
pypy2-5.4
pypy2-5.4.1-src
pypy2-5.4.1
pypy2-5.6.0-src
pypy2-5.6.0
pypy3-dev
pypy3-portable-2.3.1
pypy3-portable-2.4
pypy3-2.3.1-src
pypy3-2.3.1
pypy3-2.4.0-src
pypy3-2.4.0
pypy3.3-5.2-alpha1-src
pypy3.3-5.2-alpha1
pypy3.3-5.5-alpha-src
pypy3.3-5.5-alpha
pypy3.5-c-jit-latest
pyston-0.5.1
pyston-0.6.0
stackless-dev
stackless-2.7-dev
stackless-2.7.2
stackless-2.7.3
stackless-2.7.4
stackless-2.7.5
stackless-2.7.6
stackless-2.7.7
stackless-2.7.8
stackless-2.7.9
stackless-2.7.10
stackless-2.7.11
stackless-2.7.12
stackless-3.2-dev
stackless-3.2.2
stackless-3.2.5
stackless-3.3-dev
stackless-3.3.5
stackless-3.4.1
stackless-3.4.2
環境切替確認
任意の(導入可能な)Python環境をインストールし、切り替えてみる:あれ?切り替わってないですね...
$ pyenv install 3.5.2
$ pyenv global 3.5.2
$ pyenv rehash
$ python --version
Python 2.7.10
下記エントリに基づいて環境変数設定を行ってみたが状況変わらず。
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ source .bash_profile
下記エントリを参考にevalコマンドを実行したところ、無事解決しました。
$ eval "$(pyenv init -)" $ python --version Python 3.5.2
下記エントリの様に以下3行を ~/.bash_profileに追記しておくのが良いようですね。
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile $ source ~/.bash_profile
改めてバージョン切替を確認。
## 一旦元に戻してみる $ pyenv global system $ pyenv rehash $ pyenv versions * system (set by /Users/shinyaa31/.pyenv/version) 3.5.2 $ python --version Python 2.7.10 ## 再度3.5.2に切替 $ pyenv global 3.5.2 $ pyenv rehash $ python --version Python 3.5.2
pyenvの利用可能コマンドやpyenvの使い方についてはこの辺りを参考にしておくと良さそうです。個人用リファレンスも兼ねてメモ。
- pyenv/COMMANDS.md at master · yyuu/pyenv · GitHub
- pyenv Tutorial - Guides - Resources - Amaral Lab
- pyenvが必要かどうかフローチャート - Qiita
virtualenvで環境を作成、整備
大元のバージョン(system:2.7.10)に一旦戻し、virtualenvをインストール。sudo実行時のオプションとして『-H』を付与しています。
$ pyenv global system $ pyenv rehash $ python --version Python 2.7.10 $ sudo -H pip install virtualenv
ちなみに付与せず実行すると以下のようなアラートメッセージが表示されます。これを出さないようにするための措置としてオプションを付与して実行しています。
The directory '/Users/shinyaa31/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. The directory '/Users/shinyaa31/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
切り替えた環境の方でも念の為virtualenvを導入しておく。(必要なのかな?)
$ pyenv global 3.5.2 $ pyenv rehash $ python --version Python 3.5.2 $ sudo -H pip install --upgrade pip $ pip -V pip 9.0.1 from /Users/shinyaa31/.pyenv/versions/3.5.2/lib/python3.5/site-packages (python 3.5) $ sudo -H pip install virtualenv
上記作成環境をIntellij IDEAで連携
- 参考:IntelliJ IDEAのPythonプラグインからもvirtualenvが使える - Qiita
- 参考:[Python] pyenv + IntelliJ IDEA での開発環境構築 | Developers.IO
導入する環境としてはIntellij IDEA Ultimate Editionを用いています。
Intellij IDEA Python Pluginのインストール
Intellij IDEAでPythonを扱うにはプラグインが必要です。ですのでまずはそこから。
Intellij IDEA起動後、[Preferences]を選択。
[Plugins]→[Browse Repositories]を選択。
そのものズバリ[Python]というものがありますのでこれをインストール。インストールが終わるとIntellij IDEAの再起動を促されますので従います。
Intellij IDEA pyenv連携設定
pyenvを使って任意のバージョンを導入すると、以下の様な形で個別にバージョン毎のフォルダ及び構成が作成されます。Intellij IDEAの設定ではこのパスを読み込ませる事で個別の環境設定を踏まえたPythonプロジェクトを作成する事が可能です。ここでは /Users/shinyaa31/.pyenv/versions/3.5.2/bin/python3.5
のパス情報を設定する形で進めたいと思います。
$ pwd /Users/shinyaa31/.pyenv/versions/3.5.2/bin $ ls 2to3 idle pip3 pydoc3.5 python3-config python3.5m-config 2to3-3.5 idle3 pip3.5 python python3.5 pyvenv easy_install idle3.5 pydoc python-config python3.5-config pyvenv-3.5 easy_install-3.5 pip pydoc3 python3 python3.5m virtualenv
Intellij IDEAを起動、Pythonプロジェクトを作成。ここではデフォルトで選択可能なPython SDKを選ぶ形で一時的にプロジェクトを作成して行きます。
プロジェクト作成後、[File]→[Project Structure]を選択。
[Project SDK]から[New]→[Python SDK]を選択。
次いで[Add Local]を選択。
パス指定を求められますので上記指定のパスをここで設定します。ですがこの部分、macOSの[Open]のUIだと隠しフォルダの指定が出来ない模様。なので下記エントリの小技を用いつつ、上記指定パス(の上位フォルダ)を貼り付け。
対象としたいパスのファイルを指定します。
pyenvで導入した新たなPythonバージョンの環境をSDKに追加する事が出来ました!
ちゃんと導入したバージョンでプログラムが動くかを試してみたいと思います。問題無さそうですね。
まとめ
という訳で諸々の環境設定、連動設定を行ってみた訳ですが、virtualenvはIntellij IDEA連携に必要無かったですね...。
ひとまずこれでPython系の開発環境をIntellij IDEAで整える方法は分かってきたので、適宜必要な環境を作成・管理して行こうと思います。