В Python имя модуля обычно совпадает с именем соответствующего файла, но у меня есть проблема с модулем, для которого это не так:
me@host:/usr/lib/python2.7/dist-packages/paraview$ ls vtkCommonCorePython*
vtkCommonCorePython.x86_64-linux-gnu.so
me@host:/usr/lib/python2.7/dist-packages/paraview$ python -c \
"import vtkCommonCorePython; print(vtkCommonCorePython.__file__)"
vtkCommonCorePython.x86_64-linux-gnu.so
Как это работает?
Моя проблема в том, что я пытаюсь использовать этот модуль с другим Python (/opt/python/2.7.9/bin/python), и он не находит модуль:
me@host:/usr/lib/python2.7/dist-packages/paraview$ module load python/2.7.9
--- Loading module environment: python/2.7.9
------------------------------------------------
me@host:/usr/lib/python2.7/dist-packages/paraview$ python -c \
"import vtkCommonCorePython; print(vtkCommonCorePython.__file__)"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named vtkCommonCorePython
Примечание. Большинство файлов в /usr/lib/python2.7/lib-dynload
также заканчиваются на x86_64-linux-gnu.so
, а файлы в /opt/python/2.7.9/lib/python2.7/lib-dynload
просто заканчиваются на .so
.
Обновление после ответа cdarke:
cdarke упоминает функцию imp.get_suffixes
, которая возвращает кортеж с суффиксами и их значением для Python:
с помощью /opt/python/2.7.9/bin/python
[('.so', 'rb', 3), ('module.so', 'rb', 3), ('.py', 'U', 1), ('.pyc', 'rb', 2)]
и с /usr/lib/python
[('.x86_64-linux-gnu.so', 'rb', 3), ('.so', 'rb', 3), ('module.so', 'rb', 3), ('.py', 'U', 1), ('.pyc', 'rb', 2)]
Эта разница объясняет, почему я получаю ошибку, но тогда не похоже, что эти суффиксы установлены в site.py
(как пишет cdarke) и нет функции imp.set_suffixes
.
Итак, чтобы решить проблему, мне нужно знать, как устанавливаются эти суффиксы.
Обновление 2
Таким образом, кажется, что суффиксы закодированы в двоичный файл Python, а это означает, что нет возможности изменить его после сборки Python. Таким образом, самым простым способом решить проблему было бы пересобрать opt Python и, таким образом, понять, какие опции дать configure
, чтобы получить мультиархив Python, как системный Python под Debian Jessie.
Cdarke, большое спасибо за помощь.