2012-03-05 14 views
0

私は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のパスにする必要があります。

おかげ

+0

注:私のプログラムを呼び出す前に、PYTHONHOME =/tmp/work/mdorier1/localを使用すると、実際に動作しますが、なぜこのデフォルトの場所が表示され、それを変更するのが適切なのかを知りたいです。 – sunmat

答えて

1

あなたは、おそらくシステムのPythonの前にPATH変数にあなたのPythonのbinディレクトリを持っていません。

それとも、単に間違ってあなたのPythonをコンパイルして使用していませんでした:

./configure --prefix=/tmp/work/mdorier1/local 

ので、今ではそのファイルがどこかにあると思います。

+0

はい、PATHにはPythonのデフォルトバージョンが含まれていますが、私のものはありません。私はフルパスでmineを呼び出します。だから私はそれが理由だと思う。ありがとう。 – sunmat

関連する問題