LoginSignup
9
8

More than 5 years have passed since last update.

Homebrewで入るPython2.7.11でDjangoのrunserverがコケることに対応したメモ

Last updated at Posted at 2015-12-26

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

うまく起動したようです。

9
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8