【发布时间】:2015-06-09 13:28:46
【问题描述】:
在 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 以获得作为 Debian Jessie 下的系统 Python 的 Python 多架构。
Cdarke,非常感谢您的帮助。
【问题讨论】: