読者です 読者をやめる 読者になる 読者になる

c-bata web

@c_bata_ のメモ。python多め

MacPortsからHomeBrewに乗換え&Python開発環境構築

追記 (homebrewでpythonいれるのと、virtualenvwrapperやめました)

ライブラリとか作ってるとtoxで複数のバージョンのPythonを動かしたりする必要があります。 HomebrewはPython2.7とPython3.5だけとかならいいのですが、3.3 ~ 3.5までインストールしたいとかは基本的に出来ません。

github.com

今はhomebrewのpythonをして、pymという管理ツールを使っています。

virtualenvwrapperもわざわざ入れるほどでもないので↓を.bashrcに書いています。workon はこれで出来ます。

## workon function like virtualenv wrapper
WORKON_HOME=${WORKON_HOME:-$HOME/.virtualenvs}
workon() {
    if [ $# -ne 1 ]; then
        for env in $(ls -d ${WORKON_HOME}/*/); do
            basename ${env}
        done
    elif [ -d ${WORKON_HOME}/${1} ]; then
        source ${WORKON_HOME}/${1}/bin/activate
    fi
}

きっかけ

前から色んなコトしてるとMacPortsよりもHomeBrewを見かけた(気のせいかもだけど)。実際、僕の周りでもHomeBrewユーザが圧倒的に多い。root権限要らないし、依存関係でインストールされるソフトウェアが少ないらしい。


MacPorts --> HomeBrew

MacPortsのアンインストールはこちらを参考にすれば問題なくいけました。一応パッケージ一覧をメモ$ port installed > macports.txtとかしておくと良さそうです。HomeBrewは公式サイトに書いてあるコマンドをコピペ。

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

その後も色々やるのですが↓にまとまってました。

$ echo export PATH='/usr/local/bin:$PATH'
$ brew doctor
  ここでWarningsのオンパレードをくらうけどめげずに対処。
$ brew update


brew doctor時のWarningに対処する。

[警告1]Some directories in /usr/local/share/man aren't writable.
Warning: Some directories in /usr/local/share/man aren't writable.
This can happen if you "sudo make install" software that isn't managed
by Homebrew. If a brew tries to add locale information to one of these
directories, then the install will fail during the link step.
You should probably `chown` them:

    /usr/local/share/man/de
    /usr/local/share/man/de/man1

どうやら権限がないとだめみたいです。↓のようにしとけば治りました。

$ ls -la /usr/local/share/man/
total 32
drwxrwxr-x    8 root  admin    272  3 18 12:44 .
drwxrwxr-x    5 root     admin    170 10 24 08:29 ..
drwxr-xr-x    3 root     wheel    102 10 24 08:29 de
drwxrwxr-x  184 root     admin   6256  3 20 14:09 man1
drwxrwxr-x   10 root     admin    340 10 24 08:29 man3
drwxrwxr-x    9 root     admin    306  1 20 19:59 man5
drwxrwxr-x   13 root     admin    442 10 24 08:29 man7
-rw-r--r--    1 root     admin  14705  3 18 12:44 whatis
$ sudo chown masashi /usr/local/share/man/de/
$ sudo chown masashi /usr/local/share/man/de/man1


[警告2]Python is installed
Warning: Python is installed at /Library/Frameworks/Python.framework

Homebrew only supports building against the System-provided Python or a
brewed Python. In particular, Pythons installed to /Library can interfere
with other software installs.

こちらに同じような症状の方がいました。

↑のサイトによるとどうやらこれは、MacインストーラPythonを導入した時に作られたようです。 みなさん削除しているようなので、僕も上の記事を参考に削除。

  1. アプリケーションフォルダのPython2.7をゴミ箱に投げる。
  2. sudo rm -rf /Library/Frameworks/Python.framework
  3. シンボリックリンク削除。

シンボリックリンクは↓のように確認できます。

$ ls -l /usr/local/bin | grep Python | awk '{print $9}'
2to3
2to3-2
2to3-2.7
idle
idle2
idle2.7
pydoc
pydoc2
pydoc2.7
python
python-32
python-config
python2
python2-32
python2-config
python2.7
python2.7-32
python2.7-config
pythonw
pythonw-32
pythonw2
pythonw2-32
pythonw2.7
pythonw2.7-32
smtpd.py
smtpd2.7.py
smtpd2.py

上のブログの人はrmで消していましたが、HomeBrewはbrew pruneコマンドでデッドシンボリックリンクを全部消してくれるみたいです。

$ brew prune
$ brew doctor
Your system is ready to brew.

なんか感動!コンピュータもだいぶスッキリした気がします。

Pythonも綺麗に削除できたようです。.bash_profileにパスが残ってるのでそれも削除しときましょう。↓の行を削除

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

sbinディレクトリの作成と$PATHの設定

こちらこちらを参考にsbinディレクトリを作成していきます。

Homebrewが使用する/usr/local/binはデフォルトでパスが通っているので、通常は設定を変更する必要はありません。 しかし、Macバンドルのソフト(最初から入ってるやつ)をHomebrewで入れ直す場合は、/usr/local/binが優先されるようにします。そうしないと入れたソフトを使う事ができません。

このディレクトリはデフォルトでは存在せず、Homebrewをインストールしても作成されないとのことなので、作成。

$ sudo mkdir /usr/local/sbin
$ sudo chmod g+rwx /usr/local/sbin

次にHomebrewでインストールしたコマンドが適切に実行されるようにコマンド検索パスを変更。

Mac OS Xのコマンド検索パスは/etc/pathsに記述されていて、このファイルの内容が$PATHに設定されるようになっている。既存の「/usr/local/bin」を先頭行に移動し、「/usr/local/sbin」の行を追加すればよい。

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

↓のように書き換え。(↑は書き換え前)

$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin


便利なパッケージをインストール

MacPortsの時も使っていたパッケージをインストール

  • rmtrash : 指定ファイルをゴミ箱に捨てる。rmに置き換えると良い。
  • imagemagick : 画像変換ツール。色々できる。
  • pdftk : PDF変換ツール。ちょっとバージョン古いけどまぁOK。
  • tree : ディレクトリ構成をツリー表示で見やすく表示してくれる。
  • wget : 説明不要?
  • Ricty : プログラマ御用達フォントらしい

rmは怖いので、rmtrashに置き換えています。.bashrcに↓を追記。

alias rm='rmtrash'

ここで念のためbrew doctorをしてみるとerrorが出た。

$ brew doctor
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:

    imagemagick
$ brew link --overwrite imagemagick
Linking /usr/local/Cellar/imagemagick/6.8.7-7... 71 symlinks created
$ brew doctor
Your system is ready to brew.


Python開発環境を整備

virtualenvで管理するのが流行りらしいので、便乗します。 virtualenvの説明に関してはこちらこちらが分かりやすかったです。

グローバルにPythonをインストールすると,複数のバージョンが共存できなくなる.独立したPythonを現在のディレクトリのみで使うようにするのがvirtualenv。virtualenvwrapperはそれをさらに簡単に扱えるとても便利なライブラリ。


pipのインストール

pipは、easy_install を置き換えるものとして開発されていて、パッケージのuninstallもできて便利らしい。

$ sudo easy_install pip

pipを使ったインストールはこちらによると

ライブラリのインストールは$ pip install (ライブラリ名)で。$ sudo pip install (ライブラリ名)だとせっかく固有に環境切ったのにグローバルに入っちゃうので, 注意してください。


Python, のインストール

HomeBrewでPython2.7.6をインストール

$ brew install python

途中でエラーが出ました。こちらによるとeasy_installで入れたpipが原因のようです。スゴイ参考になりました。

$ which python
/usr/bin/python         <- これはMacに標準で入ってるPythonだからbrewで入れたやつじゃない!
$ sudo chown $USER /usr/local/bin/pip*
$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.6... 35 symlinks created
$ which python
/usr/local/bin/python   <- これがbrewで入れたやつ!


virtualenvとvirualenvwrapperをPython 2.7.4環境へインストール

こちらにはVirtualenvwrapperは各環境を管理するツールなので, wrapperそのものはグローバルにインストールする。と書かれてあるのですが、ほかのサイトを見ると皆さん普通にsudo使わずにインストールしてます。こちらによると、

virtualenv を使うと、たくさんの独立した Python 環境を作成できます。システム環境に依存する全ての Python 環境から同じパッケージを共有できるように、システムにインストールされている Python (virtualenv がアクティブではない) に virtualenv と virtualenvwrapper の2つだけはインストールする必要があります。

結局どうすればいいのか分からないけど、とりあえずsudo使わずにインストールしてみます。分かる方いましたら、コメント等で教えてください...

$ pip install virtualenv virtualenvwrapper

このままではまだ使える状態になっていないらしく、こちらを参考にしてvirtualenvwrapperにパスを通すため、.bash_profileに以下を追記。

# Virtualenvwrapper
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
fi

/usr/local/bin/virtualenvwrapper.sh があれば(=virtualenvwrapperがインストールされていれば), WORKON_HOMEを設定してvirtualenvwrapper.shを実行。virtualenvwrapper.shのPATHは環境にもよるので$ which virtualenvwrapper.shで確認しておく。

僕の環境では一緒でした。

$ which virtualenvwrapper.sh
/usr/local/bin/virtualenvwrapper.sh


Python3のインストール

$ brew install python3

終了!


おわりに

実際にvirtualenvwrapperを使って開発環境を構築する方法は別の記事にします。ほとんど知識のない状態からだったので結構大変でした。アドバイスとかあればお願いします。

ついでにbrewの設定情報も載せておきます。

$ brew --env
HOMEBREW_CC: clang
HOMEBREW_CXX: clang++
MAKEFLAGS: -j4
CMAKE_PREFIX_PATH: /usr/local
CMAKE_INCLUDE_PATH: /usr/include/libxml2:/System/Library/Frameworks/OpenGL.framework/Versions/Current/Headers
CMAKE_LIBRARY_PATH: /System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries
PKG_CONFIG_LIBDIR: /usr/lib/pkgconfig:/usr/local/Library/ENV/pkgconfig/10.9
ACLOCAL_PATH: /usr/local/share/aclocal
PATH: /usr/local/Library/ENV/4.3:/usr/bin:/bin:/usr/sbin:/sbin
$ brew --config
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: 6b7c9f7b9634756fa74c0d9a3430dbfaa39c900d
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: quad-core 64-bit ivybridge
OS X: 10.9.2-x86_64
Xcode: 5.1
CLT: 5.1.0.0.1.1393561416
Clang: 5.1 build 503
X11: 2.7.5 => /opt/X11
System Ruby: 1.8.7-358
Perl: /usr/bin/perl
Python: /usr/local/bin/python => /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby


参考リンク集

本当に勉強になりました。感謝です。