python库和模块的区别_Python动态库模块的名称与文件名不同

在Python中,模块的名称通常与相应文件的名称相同,但是我遇到了与模块无关的问题,事实并非如此:

1

2

3

4

5

6me@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)一起使用,但找不到该模块:

1

2

3

4

5

6

7

8me@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"", line 1, in

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

1[('.so', 'rb', 3), ('module.so', 'rb', 3), ('.py', 'U', 1), ('.pyc', 'rb', 2)]

和/ usr / lib / python

1[('.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,非常感谢您的帮助。

请参阅:stackoverflow.com/questions/13495285/

.so文件当然也可以用C或C ++编写。在Python 2 API中,有一个入口点函数在其中命名模块,因此对于名为" example"的模块:

1

2

3

4PyMODINIT_FUNC initexample(void)

{

(void)Py_InitModule("example", ExampleMethods);

}

Py_InitModule的第二个参数是方法数组的名称-基本上是C函数名称的列表。 .so文件与Python27运行时库链接。

那么Python如何知道要使用哪些后缀?您可以使用以下方法找到这些:

1

2import imp

print imp.get_suffixes()

这将显示系统上模块的有效后缀(imp模块的文档具有指导意义)。

编辑:

在深入研究了源代码等之后,我发现了configure.ac中的相关行。在构建期间使用了两个宏,VERSION和SOVERSION。在我看来,差异是因为python是用不同的方式构建的。我认为答案是在每个平台上从源代码构建模块。

我提供的有关site.py的原始信息来自http://bioportal.weizmann.ac.il/course/python/PyMOTW/PyMOTW/docs/site/index.html,但我尚未对其进行测试。

有一个未公开的imputil.add_suffix()函数,但是显然不是设计用来由用户调用的。

感谢您的imp.get_suffixes()。 但是,似乎这些后缀未在site.py中设置...

@paugier:是的,您是对的,我的信息已经过时了。 我会追逐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值