EmptyPage.jp > Whining Express > 2007-01-27
サイトの更新情報や日々の雑感など。
雑談というか告知というか。
「『さくらのレンタルサーバ』で Python 外部モジュールを使う」が参考になっている方々が少なからずいるようで、書いた者としてはやってよかったと思っています。(べつにページの有用さ具合を測る尺度にはならないけど)はてなブックマークに入れている人もいるし、web.py (作ったのは Aaron Swartz だ)を導入したり、Trac を動かす(!)などの参考文献として参照してもらってるようです。
ただ、そこで書いた user モジュールを使って sys.path をいじる方法を気に入ってしまった人が思いのほか多いようなのが心配になってきた。あのやり方はよくないと思います。
あの節を書いている時点では、なんとなく、直感的に、「これはどうなのか」というサインが頭の片隅に浮かんでいただけの状態で、理論的にそれを説明することには及ばなかったのでそのままタイプを進めてしまったのですが(その感触があったせいで、今の版でもそれほどプッシュはしていない)。その後、考えも整理できてきた今では、はっきりと「これはよくない」と考えています。改訂したら、この箇所は削除するか、ちょっと触れる程度にしたい。
なぜか? CGI に限らず、プログラミングをよくしている人なら当然すぐにそう考えたはずのことなのですが……。文章にすると時間がかかるので(そしてそれをやるならここじゃなくて「さくら Python」の記事でやればいいわけで)、以下思いつくままに箇条書き。
import user
したところで、foo.cgi に可搬性ができたといえるのか。いえない。なぜなら import user
とはプライベートな用途の最たるもので、これはモジュールのパスを追加するための仕組みでもなければ、CGI のための仕組みですらない。import user
してるスクリプトというのはプライベートの領域に属するファイルとみなすべき。import user
している側からは、それは想像もつかない。自前の関数で range をオーバーロードしてるかもしれない。sys.path.append(...)
と直接書いても移植性は(移植性がないことに)変わりないし、むしろそこで何をすべきかがわかってよい。はじめから「これは環境によって書き換えるファイル」と考えておけば、sys.path が通ってないから云々という問題に悩まされることはかえって少なくなる。じっさいに改訂したら、こんな理由までこまごまとは書かないと思いますけど、まあ考えの経緯はこんな感じです……。最初に感じてた「どうなのか」サインを、記事を読んだ人も持ってくれるかなあ、というのをあてにしてたということもあったのかもしれない。そもそも import user
じたいが暗黙的で Python らしくないですよね。
ここに書いたって読む人はほとんどいないから、一刻も早く改訂しないと……。