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)のビルドも上手くいった。
画像の色空間を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の情報ってなかなかうまく出てきませんね。