Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

zaburo
こんにちは。自分用のメモをだらだら公開しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした