Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

GAE on virtualenv

virtualenv上でGAEのdev_appserver.pyを動かそうとNo module named cgiが出たりしますが、これはdev_appserver.pyがos.pyが入っているディレクトリ以外からモジュールをロードしないようにサンドボックスを作っているからです。virtualenvな環境だとos.pyはローカルの環境にありますが、それ以外は通常のPythonのpathにあるものを使おうとするため制約に引っかかります。

で、見た感じこの辺で昔直した(?)みたいですが、これだと手元の環境では .pyc が作られた場合に、 os.__file__ がシンボリックリンクではなく .pyc という実ファイルを指してしまい、うまく動きませんでした。

ってことで、もう一ひねりしてこんな感じ。

これで手元のOS Xでは、うまく動かすことができました。ただし、SITE_PACKAGES 変数は手を付けてないので、 --no-site-packages してない環境では、サンドボックスが破られてしまいます。SITE_PACKAGES には複数の値を入れられない構造なので、まともに直すのであればこの辺にも手を付ける必要がありそうです。

なお、本家のIssueの方では違うパッチが提案されてます。