somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Python】2.xと3.xのインストールと切り替え【Mac】

homebrewでインストールしました。バージョンは2系最後の2.7系と3系を使えるようにしました。

2系と3系の違い

  • 文字の扱い

分かり次第追加する予定です。

インストール前に

brewでインストールする前にeasy_installやpipなどのパッケージ管理用ツールをインストールしていたので削除しました。

sudo easy_install -m pip  
sudo rm -rf /Library/Python/2.7/site-packages/pip-1.3.1-py2.7.egg/  
sudo rm `which pip` # 必要なかったかも
sudo rm `which pip-2.7` # 必要なかったかも

インストール(2系)

念の為に最新にしておきます。

brew upgrade
brew update

インストールします。

brew install python
python --version
Python 2.7.5

これにより、2.7系がインストールされました。下記を実行するように言われたので実行します。最初にpipを削除しておいたので何も起きませんでした。

Setuptools and Pip have been installed. To update them
  pip install --upgrade setuptools
  pip install --upgrade pip

こちらは忘れていて、実行していませんでした…。

To symlink "Idle" and the "Python Launcher" to ~/Applications
  `brew linkapps`

環境切り替えツールのインストール

virtualenv とそのラッパーvirtualenvwrapperをインストールします。

pip install virtualenv virtualenvwrapper

    Installing virtualenv script to /usr/local/bin
    Installing virtualenv-2.7 script to /usr/local/bin

    changing mode of /usr/local/bin/virtualenvwrapper.sh to 755
    changing mode of /usr/local/bin/virtualenvwrapper_lazy.sh to 755

    Installing virtualenv-clone script to /usr/local/bin

いろいろインストールされましたが、とりあえずvirtualenvwrapper.shを見てみると

# Project home page: http://www.doughellmann.com/projects/virtualenvwrapper/

と書いてあったのでホームページに行くとhttps://bitbucket.org/dhellmann/virtualenvwrapper にリダイレクトされました。ここに記載されているInstallationのリンクからhttp://virtualenvwrapper.readthedocs.org/en/latest/#introduction を見つけました。

First, some initialization steps. Most of this only needs to be done one time. You will want to add the command to source /usr/local/bin/virtualenvwrapper.sh to your shell startup file, changing the path to virtualenvwrapper.sh depending on where it was installed by pip.

と書いてあったのでvirtualenvwrapperを実行するために.zshrcに以下を追加し、さらに実行します。

source /usr/local/bin/virtualenvwrapper.sh

実行後、特に何も表示されませんでしたが、vを入力した後に出てきた下記補完候補になにかしらの値を設定したのでしょう(一部関係ないものを含む)。

VIRTUALENVWRAPPER_ENV_BIN_DIR                virtualenv-2.7                               virtualenvwrapper_initialize                 virtualenvwrapper_verify_active_environment
VIRTUALENVWRAPPER_HOOK_DIR                   virtualenv-clone                             virtualenvwrapper_lazy.sh                    virtualenvwrapper_verify_project_home
VIRTUALENVWRAPPER_PROJECT_FILENAME           virtualenvwrapper.sh                         virtualenvwrapper_mkproject_help             virtualenvwrapper_verify_resource
VIRTUALENVWRAPPER_PYTHON                     virtualenvwrapper_absolutepath               virtualenvwrapper_mktemp                     virtualenvwrapper_verify_virtualenv
VIRTUALENVWRAPPER_VIRTUALENV                 virtualenvwrapper_cd                         virtualenvwrapper_mkvirtualenv_help          virtualenvwrapper_verify_virtualenv_clone
VIRTUALENVWRAPPER_VIRTUALENV_CLONE           virtualenvwrapper_derive_workon_home         virtualenvwrapper_run_hook                   virtualenvwrapper_verify_workon_environment
VirtualBox                                   virtualenvwrapper_expandpath                 virtualenvwrapper_setup_tab_completion       virtualenvwrapper_verify_workon_home
VirtualBox\ VMs/                             virtualenvwrapper_get_python_version         virtualenvwrapper_show_workon_options        virtualenvwrapper_workon_help
virtualenv                                   virtualenvwrapper_get_site_packages_dir      virtualenvwrapper_tempfile  

インストール(3系)

インストールします。3系は3をつけるようです。

brew install python3
python3 --version
Python 3.3.2

2系同様のメッセージが表示されましたので、実行しておきました。3系のpipは、インストール時のバージョン指定と似てpip3という名前になっています。

Setuptools and Pip have been installed. To update them
  pip3 install --upgrade setuptools
  pip3 install --upgrade pip

To symlink "Idle 3" and the "Python Launcher 3" to ~/Applications
  `brew linkapps`

また、2系のときに実行し忘れていたbrew linkapps を実行します。

brew linkapps 
Linking /usr/local/Cellar/python/2.7.5/Build Applet.app
Linking /usr/local/Cellar/python/2.7.5/IDLE.app
Linking /usr/local/Cellar/python/2.7.5/Python Launcher.app
Linking /usr/local/Cellar/python3/3.3.2/IDLE 3.app
Linking /usr/local/Cellar/python3/3.3.2/Python Launcher 3.app
Finished linking. Find the links under /Applications.

3系用のBuild Applet.appがないこと以外は対応づけされています。

環境切り替え

virtualenvで作成される環境は、環境変数$WORKON_HOMEに格納されます。

echo $WORKON_HOME
/Users/username/.virtualenvs

作成はmkvirtualenvで行います。

mkvirtualenv --help
Usage: mkvirtualenv [-a project_path] [-i package] [-r requirements_file] [virtualenv options] env_name

-p PYTHON_EXE, --python=PYTHON_EXE

忘れてはいけないオプションは、-pオプションとbrewでインストールしたpython3へのパス(もしくは、今回の場合python3.3へのパス)です。これを忘れると現在の?もしくはデフォルトのバージョンに合わせて環境が作成されます。これを忘れて2.7.5を作成してしまいました。

これを解消するには、下記を実行します。

deactivate
rmvirtualenv env_name

deactivateを実行する理由は現在の環境は削除できないため一旦デフォルトの環境に戻るためです。

さて、今回はenv_nameをバージョンに合わせてpy3.3にしました。

mkvirtualenv -p /usr/local/bin/python3.3 py3.3

Running virtualenv with interpreter /usr/local/bin/python3.3
Using base prefix '/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3'
New python executable in py3.3/bin/python3.3
Also creating executable in py3.3/bin/python
Installing Setuptools............................done.
Installing Pip........................................done.
(py3.3)[knt@i121-115-142-146] ~

$WORKON_HOMEが作成され、そこにbin/python3.3が作成されました。また、プロンプトの表示が

[username@host] ~

から

(py3.3)[username@host] ~

へと変わりました。バージョンを確認すると

python --version                                
Python 3.3.2

無事に変わっていることも確認できました。しかし、これだけでは次回ログイン時に戻ってしまいます。作成済み環境への切り替えは、下記を実行します。

workon py3.3 

毎回実行するのが面倒なときは、$WORKON_HOME/py3.3 の有無を確認してから上記コマンドを実行するように.xshrcに書けば良いと思います。

pipでなにかインストールしてみて現バージョンだけで使えるか確認する

一番便利そうなsphinxをインストールしてみることにしました。

workon py3.3 
pip install sphinx

which sphinx-build
$WORKON_HOME/py3.3/bin/sphinx-build

deactivate
which sphinx-build
sphinx-build not found

2系に戻したら見つからなくなっています。問題無さそうです。

まとめ

  • 簡単に切り替えられる
  • pipでインストールしても影響ない