さくら共有サーバーでImportError: No module named MySQLdbが出る

この記事について

環境さくらスタンダードプラン、自前python2.7、MySQL for Python
目的ブラウザからpythonスクリプトを実行するとImportErrorになるのを直す
結果.cshrcに書いていたPYTHONPATH等をスクリプト先頭の#!行に全部書いて解決

つまずきポイント要約

  • ターミナルからや、さくら標準pythonでは問題なし。自前python+ブラウザ経由のときだけエラー
  • 自前pythonをブラウザ経由で動かすと.cshrcのパス設定は無視されるよう

事象

さくら共有サーバーに「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 <module>
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」に書いてあるパスは無視されるって事かな?

参考:こちら

関連記事

タイトルとURLをコピーしました