mod_wsgiでアプリごとにvirtualenv環境を設定する

環境は以下。

flaskでやってみます。

前準備

まずpythonbrewでvirtualenvで環境をつくる。

$ pybrew venv create -p 2.7.2 --no-site-packages test
$ pybrew venv use -p 2.7.2 test
(test)$ pip install flask

適当にアプリを置く。
~/app/test/app.wsgi

import sys, os
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

from main import app as application

~/app/test/main.py

# -*- coding: utf-8 -*-

from flask import Flask

app = Flask(__name__)
app.config['DEBUG'] = True

@app.route('/')
def index():
    return 'test'

if __name__ == '__main__':
    app.run()

mod_wsgiはpythonbrewで入れたpython2.7.2でコンパイル、インストールする。

...
$ ./configure --with-apxs=/usr/bin/apxs2 --with-python=/home/あなた様/.pythonbrew/pythons/Python-2.7.2/bin/python
...

apacheの設定

WSGIPythonHomeにmod_wsgiのインストールに使ったpythonを指定する。

/etc/apache2/conf.d/wsgi.conf

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIPythonHome /home/あなた様/.pythonbrew/pythons/Python-2.7.2
WSGIPythonEggs /var/www/.python-eggs
WSGISocketPrefix /var/run/wsgi

/etc/apache2/sites-available/default

...
    WSGIDaemonProcess test user=あなた様 group=あなた様 threads=5 python-path=/home/あなた様/.pythonbrew/venvs/Python-2.7.2/test/lib/python2.7/site-packages
    WSGIScriptAlias /test /home/あなた様/app/test/app.wsgi
    <Directory "/home/あなた様/app/test">
        WSGIProcessGroup test
        WSGIApplicationGroup %{GLOBAL}
        Options ExecCGI
   </Directory>
...


wsgiに使うpythonはインストール時に固定する必要がありますが、site-packagesはWSGIDaemonProcessに指定することでアプリごとに設定することができます。

zshのアップグレードでPATHがおかしくなった

気付いたら/usr/local/binにPATHが通らなくなってた。
原因を探したところ、homebrewでアップグレードしたzshのバージョンの問題のよう。
たぶん、/etc/zshenvが読まれなくなった。

/etc/zshenv

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

path_helperは/etc/pathsをPATHに設定するというもの。

/etc/paths

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

4.3.15ではちゃんと読み込まれていたけど、4.3.17にアップグレードすると反映されなくなった。
.zshrcに追加しても良いけど、気持ち悪いのでとりあえずバージョンを戻して様子見。
homebrewバージョン戻すのめんどい。

環境

OS X 10.6.8
Homebrew 0.9

pythonbrewで--configure="--enable-shared"したときの注意

--configure="--enable-shared"するとsetuptoolsのインストールで止まる。
.soファイルのリンクが辿れない感じ。

だいたいここに書いてあることと一緒。
build - Problems compiling Python 3.2 and 2.7 using pythonbrew

$ pythonbrew install --configure="--with-threads --enable-shared" --no-setuptools 2.7.2
$ sudo vim /etc/ld.so.conf.d/python2.7.2.conf
/home/あなた様/.pythonbrew/pythons/Python-2.7.2/lib
$ sudo ldconfig

$ pythonbrew use 2.7.2
$ wget http://python-distribute.org/distribute_setup.py
$ python distribute_setup.py
$ easy_install pip

setuptools(easy_install, pip)を自分で共有ライブラリ設定した後に手動で入れる。
これでOpenCV(python support)のビルドも上手くいった。

Flaskアプリをwsgiでデプロイするときのパス設定

app.wsgi

import sys, os
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

from main import app as application

毎回パス指定するのは面倒なので。
wsgiで動かすときはFlaskアプリ内でも絶対パスを使う必要がある。

main.py

...
app = Flask(__name__)
ROOT = app.root_path  #ルートパスを取得。os.path.join()して使う
...

画像の色空間をHSVへ変換、操作

cvtColorの使い方がcv2(OpenCV2.3)になってちょっと変わっていたのでメモ。

>>> import cv2
>>> import numpy
>>> src = cv2.imread('src.jpg', 1)
>>> dst = numpy.zeros(src.shape, dtype=numpy.uint8)
>>> dst = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)  #BGR→HSVへ変換
>>> dst[:,:,0]  #H
array([...
>>> dst[:,:,1]  #S
array([...
>>> dst[:,:,2]  #V
array([...
>>> dst[:,:,1] = 0  #彩度を0にしてみる
>>> dst = cv2.cvtColor(dst, cv2.COLOR_HSV2BGR)  #HSV→BGRへ戻す
>>> cv2.imshow('dst', dst)
>>> cv2.destroyWindow('dst')

cv2.cvtColorのコードがcv2.COLOR_*に。
以前のまま使いたい場合はcv2.cv.CV_*で。

MacでLaTeXにパッケージを追加

ときどきlistingsを使う機会があり、とりあえずでtexファイルと同じ場所にその都度コピーしていたのですが、さすがになんとかしようと。

環境は

TEXMFHOMEを変更

個人で追加するパッケージはTEXMFHOMEに追加するようです。
デフォルトはホーム直下が多いようですが、うちの環境では(Macでは?)違うようです。

$ kpsewhich -var-value TEXMFHOME
/Users/<ユーザ名>/Library/texmf

環境の移行などがやりやすいようにホーム直下に隠しディレクトリとして置きます。

$ mkdir ~/.texmf
$ sudo vim /usr/local/texlive/2011/texmf.cnf
%TEXMFHOME = ~/Library/texmf
TEXMFHOME = ~/.texmf

確認してみます。

$ kpsewhich -var-value TEXMFHOME
/Users/<ユーザ名>/.texmf

変更できました。

パッケージを追加

先ほどのTEXMFHOMEにパッケージを追加します。
追加する場所はTEXMFHOME直下ではなく、texディレクトリを掘る必要があるので注意です。
さらにtex/latexを掘りますが、TEXMFHOME/tex以下を辿って検索してくれるので面倒な人はtex直下でも良いかと。

$ mkdir ~/.texmf/tex
$ mkdir ~/.texmf/tex/latex
$ mv ~/.texmf/tex/latex listings

無事listingsを追加できました。

おまけ

あえて$TEXMFHOMEと書かずにTEXMFHOMEと書いたのは、直接の環境変数ではないからなんか気持ち悪いなということで$はつけませんでした。どうでも良いですね。
多重TEXMFツリー



パッケージをインストールするときはmktexlsrを使えとか使うなとか言われていますが、たしかに現在のハードウェアスペックならいらないんじゃないですかね。こっちの方がいろいろと楽です。
しかし検索してもTeXの情報ってなかなかうまく出てきませんね。

AppleIDとApple Developerアカウント

Safari拡張を自分でカスタマイズしようと思ったら、AppleIDとApple Developerのアカウント管理があまりに酷くて心が折れた。

Developerアカウントの名前がおかしくなっていたので直そうとしたのだけれど、AppleIDで変更してもDeveloper側は変わらない。でもSafari Developer Programの登録確認画面では、名字だけちゃんと反映されて表示される。
最初は言語や国の問題かと思い試行錯誤したが結果は変わらず。

結局、別のメールアドレスで新しくAppleIDを作りました……。