2015年12月26日現在、homebrewでPython2.x系を入れると2.7.11という名の2.7.10が入ります。
この2.7.11は何かとバグがあり、Djangoを始めとした幾つかのモジュールがうまく動作しません。
Djangoインストール後、
python manage.py runserver
とすると、
Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 10, in <module>
from django.apps import apps
File "/usr/local/lib/python2.7/site-packages/django/apps/__init__.py", line 1, in <module>
from .config import AppConfig
File "/usr/local/lib/python2.7/site-packages/django/apps/config.py", line 5, in <module>
from django.utils._os import upath
File "/usr/local/lib/python2.7/site-packages/django/utils/_os.py", line 5, in <module>
import tempfile
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tempfile.py", line 32, in <module>
import io as _io
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: dlopen(/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyCodecInfo_GetIncrementalDecoder
Referenced from: /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Expected in: flat namespace
in /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
という???な、エラーが出ます。
詳細はさておき、Python2.7.11のバグによるものとのことらしいので、2.7.10にダウングレードしたい。。。
###Homebrewではマナーバージョンのダウングレードは出来ない
brew search <package_name>
で検索できる範囲のものであれば、バージョンの選択も可能なようですが、Python2.7.10と2.7.11をインストール仕分ける方法は無いようです。ではどうするか?
###Formulaを直接編集する
いろいろ方法を考えたのですが、Formulaを直接編集することにしました。
一旦、pythonを削除しておきます。
brew remove python
Formulaは残っているので、それを編集します。
brew edit python
バージョンに関するところを編集します。
class Python < Formula
desc "Interpreted, interactive, object-oriented programming language"
homepage "https://www.python.org"
head "https://hg.python.org/cpython", :using => :hg, :branch => "2.7"
- url "https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz"
+ url "https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz"
brew edit では、viが起動するので普通に編集して保存します。
保存したら、再度installを実行してみます。
brew install python
すると、当然ですが、SHA256のミスマッチが起こります。
==> Downloading https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
######################################################################## 100.0%
Error: SHA256 mismatch
Expected: 82929b96fd6afc8da838b149107078c02fa1744b7e60999a8babbc0d3fa86fc6
Actual: eda8ce6eec03e74991abb5384170e7c65fcd7522e409b8e83d7e6372add0f12a
Archive: /Library/Caches/Homebrew/python-2.7.10.tgz
To retry an incomplete download, remove the file above.
Actualが実際のコードなので、これをコピーし、再度Formulaの期待値として設定します。
class Python < Formula
desc "Interpreted, interactive, object-oriented programming language"
homepage "https://www.python.org"
head "https://hg.python.org/cpython", :using => :hg, :branch => "2.7"
url "https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz"
+ sha256 "eda8ce6eec03e74991abb5384170e7c65fcd7522e409b8e83d7e6372add0f12a"
こで、再度installを実行します。
brew install python
これでうまくPython2.7.10がインストールされたようです。
###runserverしてみる
では、テストサーバが起動できるか試してみます。
python manage.py runserver
うまく起動したようです。