Встроенные поисковые модули Python в неправильном каталоге - PullRequest
0 голосов
/ 05 марта 2012

Я установил Python 2.6.7 в $ HOME / local машины, на которой уже есть Python по умолчанию в / usr (у меня нет доступа администратора на этой машине). Python по умолчанию компилируется в 32 бита, а моя локальная установка - в 64 бита. По некоторым неизвестным причинам моя локальная библиотека Python (которую я называю встроенным интерпретатором python из программы на C) ищет модули в установке по умолчанию (неправильной).

Это результат "случайного импорта"

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

Как видите, оператор импорта правильно ищет "random.py" в локальной установке Python, но оператор импорта в random.py идет в поиске math.so в неправильном месте, что заканчивается ошибкой, поскольку расположение по умолчанию имеет 32-битные модули.

Я догадался, что есть проблема с переменной окружения, и я попытался

import sys
sys.path

чтобы получить

['/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']

Я заметил, что один из путей действительно указывает на установку Python по умолчанию. Мои вопросы, таким образом: - Почему этот путь отображается здесь, так как локальная установка не имеет ничего общего с установкой по умолчанию? - Как я могу изменить это (чистым и постоянным способом)? Этот путь должен быть путем к lib-dynload в локальной установке.

Спасибо

1 Ответ

1 голос
/ 05 марта 2012

Возможно, у вас нет каталога bin вашего Python в переменной PATH до системного Python.

Или, возможно, вы просто неправильно скомпилировали свой Python и не использовали:

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

так что теперь он думает, что его файлы находятся где-то еще.

...