読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

GAE on virtualenv

python メモ

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の方では違うパッチが提案されてます。