Hatena::Grouppython

nelnal@python

2010-10-26

[] ローカルに virtualenv, virtualenvwrapper を導入する方法。 23:48  ローカルに virtualenv, virtualenvwrapper を導入する方法。 - nelnal@python を含むブックマーク はてなブックマーク -  ローカルに virtualenv, virtualenvwrapper を導入する方法。 - nelnal@python

ImportError: No module named virtualenvwrapper.hook_loader

のエラーが出てはまったのでメモ。


まずは、virtualenv, virtualenvwrapper をインストールする

$ easy_install virtualenv

$ easy_install virtualenvwrapper

つぎに .bashrc の設定を追加する

$ vim .bashrc

.bashrc への追記内容は以下の通り

export PYTHONPATH=(dir)/lib/python-2.5/site-packages/

export VIRTUALENVWRAPPER_PYTHON=(dir)/bin/python2.5/

export WORKON_HOME=$HOME/.virtualenvs

source $HOME/bin/virtualenvwrapper.sh

保存をしたら、.virtualenvs ディレクトリを作成し、.bashrc を読み込む。

$ mkdir ~/.virtualenvs

$ . ~/.bashrc

あとは virtualenv を実行するだけ

$ workon

$ mkvirtualenv testenv




python 2.5.5 install メモ 18:18 python 2.5.5 install メモ - nelnal@python を含むブックマーク はてなブックマーク - python 2.5.5 install メモ - nelnal@python

Ubuntu 10.4 LTS に python 2.5.5 を導入するときにコンパイルエラーで手間取ったのでメモ。

ちなみにインストール先はホームディレクトリです。

$ cd $HOME

$ sudo aptitude install zlib1g-lib

$ wget http://www.python.org/ftp/2.5.5/Python-2.5.5.tgz

(省略)

$ tar zxvf Python-2.5.5

(省略)

$ cd Python-2.5.5

$ ./configure --prefix=$HOME

(省略)

$ sudo make install

(省略)

After a lot of output, got this:

Listing /usr/local/lib/python2.5/xml/sax ...

Compiling /usr/local/lib/python2.5/xml/sax/__init__.py ...

Compiling /usr/local/lib/python2.5/xml/sax/_exceptions.py ...

Compiling /usr/local/lib/python2.5/xml/sax/expatreader.py ...

Compiling /usr/local/lib/python2.5/xml/sax/handler.py ...

Compiling /usr/local/lib/python2.5/xml/sax/saxutils.py ...

Compiling /usr/local/lib/python2.5/xml/sax/xmlreader.py ...

Compiling /usr/local/lib/python2.5/xmllib.py ...

Compiling /usr/local/lib/python2.5/xmlrpclib.py ...

Compiling /usr/local/lib/python2.5/zipfile.py ...

make: *** [libinstall] Error 1

$

となりエラーとなってしまう。

色々と調べたところ、以下のページに解決方法があったので、それで対応した。

http://markmail.org/message/n7oim5smzd5j3nft#query:python%20bug%231669349+page:1+mid:rf23z7wlhogponlr+state:results

$ sudo vim Modules/Setup

451 行目に

「#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz」

と書かれているのでコメントを解除する。

その後、

$ sudo make -i altinstall

$ sudo make altinstall

インストールが完了する。

[] Enum クラス 18:10  Enum クラス - nelnal@python を含むブックマーク はてなブックマーク -  Enum クラス - nelnal@python

自分流のEnumクラスを作ったので書いておく(作ったのはずいぶん前だけど)。

# -*- coding: utf-8 -*-
class EnumType(object):
    class ConstructionError(Exception): pass
    class SetNewAttributeError(Exception): pass

    MSG_KEY_ERROR = u'列挙のキーが文字列型ではありません。'
    MSG_NOT_DEFINED_KEY_IN_DICT = u'辞書に未定義のキーがあります。'
    MSG_INDEX_ERROR = u'インデックス値が数値ではありません。'

    def __init__(self, *args, **kwargs):
        """ __init__(self, *args, **kwargs):
        コンストラクタ
        
        <Example>
        EnumType('a', 'b', 'c', 'd', c=4, d=8)
            ->  a = 0, b = 1, c = 4, d = 8

        EnumType(x=10, y=10, z=30)
            -> x = 10, y = 10, z = 30
        """
        if args:
            # キー情報が可変長引数で渡されている場合
            if kwargs:
                # kwargs のキー値がの全てが args で定義されていなければならない
                if not (set(kwargs.keys()) <= set(args)):
                    raise self.ConstructionError(self.MSG_NOT_DEFINED_KEY_IN_DICT)
            if not all(map(lambda x: isinstance(x, basestring), args)):
                raise self.ConstructionError(self.MSG_KEY_ERROR)

            index = 0
            for v in args:
                index = kwargs.setdefault(v, index)
                self.__setattr__(v, index)
                index += 1
        elif kwargs: # len(args) == 0, len(kwargs) != 0 の場合
            if not all(map(lambda x: isinstance(x, basestring), kwargs.keys())):
                raise self.ConstructionError(self.MSG_KEY_ERROR)
            if not all(map(lambda x: isinstance(x, int), kwargs.values())):
                raise self.ConstructionError(self.MSG_INDEX_ERROR)

            for key in kwargs.keys():
                self.__setattr__(key, kwargs[key])
        else:
            pass

    @property
    def keywords(self):
        return self.__dict__.keys()

    @property
    def max_value(self):
        """ max_value 列挙の最大値を取得 """
        return max(self.__dict__.values())

    @property
    def min_value(self):
        """ min_value 列挙の最小値を取得 """
        return min(self.__dict__.values())

    def _getMaxValue(self):
        return self.max_value

    def _getMinValue(self):
        return self.min_value

    def __setattr__(self, name, value):
        # dict.setdefault を行うと
        # name が登録済みの場合は、登録済みの dict[name] の値を
        # name が未登録の場合は、dict[name] に value が設定される
        # このことを利用して登録済みの項目の値を変更出来ない様にしている
        self.__dict__.setdefault(name, value)
        if self.__dict__[name] != value:
            raise self.SetNewAttributeError(name, value)

    def __str__(self):
        return self.__repr__()

    def __repr__(self):
        aliases = dict()
        for key in self.__dict__.keys():
            if isinstance(self.__dict__[key], int) and not key.startswith('_'):
                aliases.setdefault(self.__dict__[key],list()).append(key)

        values = list()
        for key in aliases.keys():
            values.append("%s:%s" % (key, aliases[key]))
        return ', '.join(values)

if __name__ == "__main__":
    animals = EnumType('cat', 'dog', 'bird', 'mouse', 'fox', dog=3, mouse=7)

    print animals

    try:
        animals.bird = 10
    except EnumType.SetNewAttributeError:
        print "Animals.bird = 10 -> raise 'EnumType.SetNewAttributeError'"

    print animals.min_value, animals.max_value

    print animals.keywords

    animals = EnumType(apple=1, grape=3)


トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20101026