さくら共有サーバーに「MySQL for Python」をインストールしたときに、ImportErrorが出た。解決方法の覚書。
【環境と前提】
———————————
・さくらスタンダードプラン
・/home/workroom/local以下に自前の python2.7 がインストール済み。(さくら標準のpythonとは別で)
・/home/workroom/local以下に MySQL for Python がインストール済み。
———————————
import MySQLdb を行うとエラーが出るのだが、理解に苦しんだのはエラー発生の条件が限定されているということ。
エラー内容
—————————
Traceback (most recent call last):
File “python_test4.cgi”, line 11, in
import MySQLdb
ImportError: No module named MySQLdb
—————————
エラーが出る、もしくは出ないのは次の場合。
エラーが出ない(問題なし)
—————————
1.自前のpythonにパスを通して、ターミナルで「import MySQLdb」したとき。
2.テキストファイルの先頭に「#!/usr/local/bin/python」と記述して、pythonスクリプトをアップロードして、さくら標準のpythonを使い、ブラウザで読み込んだとき。
—————————
この2つの場合は、問題なく動作する。
エラーが出る
—————————
1.テキストファイルの先頭に「#!/home/username/local/bin/python」と記述して、pythonスクリプトをアップロードして、自前のpythonを使い、ブラウザで読み込んだとき。
—————————
自前のpythonを使って、ブラウザでpythonスクリプトを読み込んだときだけエラーが発生する。
「.cshrc」に PYTHONPATH や LD_LIBRARY_PATH を設定しているのに、無い!といわれる。
いろいろ悩んだ結果、解決法。
pythonスクリプトの先頭の記述を変更した。
—————————
#!/home/username/local/bin/python
—————————
↓↓↓
—————————
#! /usr/bin/env -S LD_LIBRARY_PATH=/home/username/local/lib PYTHONPATH=/home/username/local/lib/python:/home/username/local/lib/python/site-packages:/home/username/local/MySQL-python-1.2.3:/home/username/local/lib /home/username/local/bin/python
—————————
ようは、「.cshrc」に記述してあったpython関係のパスの記述を、全部テキストファイルの先頭にもコピーした。
これで動いた。自前のpythonをテキストファイルの記述で動かすと、「.cshrc」に書いてあるパスは無視されるって事かな?
参考:こちら