Mac OS X に gevent をインストールする(MacPorts 編)

昨日の続き。
MacPorts でインストールできないのが気持ち悪かったので色々試してみた。

$ sudo port install py26-gevent
--->  Computing dependencies for py26-gevent
--->  Dependencies to be installed: py26-greenlet py26-distribute
--->  Activating py26-distribute @0.6.13_0
Error: Target org.macports.activate returned: Image error: /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info already exists and does not belong to a registered port.  Unable to activate port py26-distribute. Use 'port -f activate py26-distribute' to force the activation.
Log for py26-distribute is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_python_py26-distribute/main.log
Error: The following dependencies failed to build: py26-greenlet py26-distribute
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>

py26-distribute が依存しているよう。

まず py26-distribute をインストールしてみる。

sudo port install py26-distribute
--->  Computing dependencies for py26-distribute
--->  Activating py26-distribute @0.6.13_0
Error: Target org.macports.activate returned: Image error: /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info already exists and does not belong to a registered port.  Unable to activate port py26-distribute. Use 'port -f activate py26-distribute' to force the activation.
Log for py26-distribute is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_python_py26-distribute/main.log
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>

失敗した。py26 でインストールしてあるものをリストアップする。

$ sudo port list installed | grep py26
py26-distribute                @0.6.13         python/py26-distribute
py26-pil                       @1.1.7          python/py26-pil
py26-setuptools                @0.6c11         python/py26-setuptools

py26-setuptools が入っていたので、それを一回アンインストールしてみる。

$ sudo port uninstall py26-setuptools
--->  Deactivating py26-setuptools @0.6c11_1
--->  Cleaning py26-setuptools
--->  Uninstalling py26-setuptools @0.6c11_1
--->  Cleaning py26-setuptools

$ sudo port uninstall py26-distribute
--->  Uninstalling py26-distribute @0.6.13_0
--->  Cleaning py26-distribute

再度 py26-distribute をインストールしてみる。

$ sudo port install py26-distribute
--->  Computing dependencies for py26-distribute
--->  Installing py26-distribute @0.6.13_0
--->  Activating py26-distribute @0.6.13_0
--->  Cleaning py26-distribute

py26-gevent をインストールする

sudo port install py26-greenlet
--->  Computing dependencies for py26-greenlet
--->  Activating py26-greenlet @0.3.1_0
Error: Target org.macports.activate returned: Image error: /opt/local/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/greenlet/greenlet.h already exists and does not belong to a registered port.  Unable to activate port py26-greenlet. Use 'port -f activate py26-greenlet' to force the activation.
Log for py26-greenlet is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_python_py26-greenlet/main.log
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>

エラーメッセージが変わった!
py26-greenlet が入んなかった。pip からインストールした py26-greenlet を削除する。

$ sudo pip uninstall greenlet
Uninstalling greenlet:
  /opt/local/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/greenlet/greenlet.h
  /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/greenlet-0.3.1-py2.6.egg-info
  /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/greenlet.so
Proceed (y/n)? y
  Successfully uninstalled greenlet

MacPorts から greenlet をインストールする。

sudo port install py26-greenlet
--->  Computing dependencies for py26-greenlet
--->  Activating py26-greenlet @0.3.1_0
--->  Cleaning py26-greenlet

gevent を入れる。

sudo port install py26-gevent
--->  Computing dependencies for py26-gevent
--->  Fetching py26-gevent
--->  Attempting to fetch gevent-0.12.2.tar.gz from http://distfiles.macports.org/python
--->  Verifying checksum(s) for py26-gevent
--->  Extracting py26-gevent
--->  Configuring py26-gevent
--->  Building py26-gevent
--->  Staging py26-gevent into destroot
--->  Installing py26-gevent @0.12.2_0
--->  Activating py26-gevent @0.12.2_0
--->  Cleaning py26-gevent

入った!

まとめ

C 言語の拡張があるようなのを pip でインストールしようとして失敗したら、MacPorts で統一してインストールすれば入る可能性が高い。