Python2.6でvirtualenvwrapper.shにエラーが出る
Pythonを覚えようと思い、とりあえず環境構築だーということでVagrant上でvirtualenvをインストール。
すると、途中でこんなエラーが出てうまくいかない。
Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/lib/python2.6/site-packages/virtualenvwrapper/hook_loader.py", line 16, in <module> from stevedore import ExtensionManager File "/usr/lib/python2.6/site-packages/stevedore/__init__.py", line 23, in <module> LOG.addHandler(logging.NullHandler()) AttributeError: 'module' object has no attribute 'NullHandler' virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenvwrapper has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is set properly.
エラーを読むとここが問題っぽそうだな
AttributeError: 'module' object has no attribute 'NullHandler'
ということで調べてみると、
こんなものを発見。
どうやらPython2.6ではNullHandlerとかいうものはサポートされていないらしい。 とはいえ、システムのPythonのバージョンは変えたくないので、
sudo vi /usr/lib/python2.6/site-packages/virtualenvwrapper/hook_loader.py
でソースコードを書き換え。
importの下に、リンク先にあるコードをコピペ。
import inspect import itertools import logging import logging.handlers import optparse import os import sys try: from logging import NullHandler except ImportError: class NullHandler(logging.Handler): def emit(self, record): pass logging.NullHandler = NullHandler
これで無事に動きました。