私はPython 2.6.7を/ usrにデフォルトのPythonを持っているマシンの$ HOME/localにインストールしました(私はこのマシンでは管理者権限を持っていません)。デフォルトのPythonは32ビットでコンパイルされ、私のローカルインストールは64ビットです。私のローカルPythonライブラリ(これはCプログラムの中から組み込みのPythonインタプリタと呼ばれます)は、デフォルトの(間違った)インストールでモジュールを検索します。間違ったディレクトリに埋め込まれたPython検索モジュール
これは、あなたが見ることができるように、import文は正しくはPythonのローカルインストールが、random.pyでimport文で「random.pyを」検索
Traceback (most recent call last):
File "test.py", line 3, in <module>
import random
File "/tmp/work/mdorier1/local/lib/python2.6/random.py", line 45, in <module>
from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil
ImportError: /usr/lib/python2.6/lib-dynload/math.so: wrong ELF class: ELFCLASS32
「輸入ランダム」の結果であります間違った場所でmath.soを検索してください。デフォルトの場所は32ビットのモジュールなので、エラーに終わります。
私は環境変数に問題があると推測し、私は
['/tmp/work/mdorier1/local/lib/python26.zip',
'/tmp/work/mdorier1/local/lib/python2.6',
'/tmp/work/mdorier1/local/lib/python2.6/plat-linux2',
'/tmp/work/mdorier1/local/lib/python2.6/lib-tk',
'/tmp/work/mdorier1/local/lib/python2.6/lib-old',
'/usr/lib/python2.6/lib-dynload',
'/tmp/work/mdorier1/local/lib/python2.6/site-packages']
を取得するために
import sys
sys.path
を試してみました、私はパスの上で実際のPythonのデフォルトのインストールを指していることに気づきました。したがって、私の質問は次のようになります: - ローカルインストールはデフォルトのものと何の関係もないので、このパスがここに表示されるのはなぜですか? - どのように変更するのですか(きれいで恒久的な方法で)?このパスは、代わりにローカルインストールのlib-dynloadのパスにする必要があります。
おかげ
注:私のプログラムを呼び出す前に、PYTHONHOME =/tmp/work/mdorier1/localを使用すると、実際に動作しますが、なぜこのデフォルトの場所が表示され、それを変更するのが適切なのかを知りたいです。 – sunmat