在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:是的,您是对的,我的信息已经过时了。 我会追逐

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

  1. 【转载】linux静态链接库与动态链接库的区别及动态库的创建

    这篇文章对于动态库的概念及使用介绍的很不错,故收藏了. 一.引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数 ...

  2. python post与get的区别_Python Requests库 Get和Post的区别和Http常见状态码

    (1)   在客户端,Get方式在通过URL提交数据,数据在URL中可以看到:POST方式,数据放置在HTML HEADER内提交. (2)   GET方式提交的数据最多只能有1024 Byte,而P ...

  3. python中的numpy模块和pandas模块的区别_python的numpy模块- 01.pandas基本数据类型

    01.pandas基本数据类型 import pandas as pd import numpy as np from pandas import Series,DataFrame 1. Series ...

  4. python动态导入模块_Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析...

    本文实例讲述了Python动态导入模块:__import__.importlib.动态导入的使用场景.分享给大家供大家参考,具体如下: 相关内容: __import__ importlib 动态导入的 ...

  5. 头文件和库文件区别,动态库和静态库的区别,动静态库的生成

    文章目录 一.什么是头文件?什么是库文件?有什么区别? 先说总结 目标文件 二.什么是静态库?什么是动态库?有什么区别? 三.为什么只用在程序头部写上包含的头文件,头文件中并没有实现内容就可以使用声明 ...

  6. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  7. qt生成无ui界面动态库,有ui界面的动态库,以及含有资源文件和qss文件的动态库

    提要 此文分别就qt生成纯代码的动态库,含有ui文件的动态库以及含有资源文件qss文件和切图的动态库. 实现 1.纯代码的生成qt库.即没有ui文件的项目. 打开QtCreate,新建文件,选择lib ...

  8. python什么模块动态调用链接库_python 动态调用模块、类、方法(django项目)

    需求:近一段时间基于django框架,开发各业务层监控代码,每个业务的监控逻辑不同,因此需要开发监控子模块,动态的导入调用. 项目名称:demo_django App:common_base.moni ...

  9. python创建字典和包的区别_python之路—模块和包

    一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...

最新文章

  1. 轉換--中文简繁体转换JS 代码
  2. 面试|图解kafka的高可用机制
  3. 如何真正提高ASP.NET网站的性能
  4. Linux系统下.ko文件是什么文件?.so文件是什么文件?
  5. php转化xml数组_PHP实现数组array转换成xml的方法
  6. android 渠道打包工具,Android渠道打包技术小结
  7. JSLint JavaScript代码质量审查工具汉化中文版隆重发布
  8. Linux中出现 -bash: unzip: command not found
  9. 2021年上半年软考真题网络工程师真题及答案解析
  10. Tomcat 下载安装教程
  11. 百度飞桨-基于CV的工业读表案例(修改读表范围和数值)
  12. 激活pytorch环境
  13. 动图静图怎么拼接在一起?教你一键快速拼接图片
  14. linux启动和关闭防火墙命令
  15. 英语听力,口语常见的三个简读/略读/变读
  16. Android RecyclerView数据错乱问题
  17. camera face
  18. VLC 媒体播放器将登陆 Apple TV
  19. 2021年通辽市高考成绩查询,2021年通辽高考状元名单公布 今年通辽高考状元是谁资料和分数...
  20. C/C++游戏开发:打造炫酷的3D跑酷游戏,小时候玩过的游戏还记得吗?

热门文章

  1. Go进程/线程/协程:单元 空间资源 切换 共享
  2. tp 查询3天内是否有记录_DNF:玩家哭诉没坐过飞机,被吧主实锤打脸,TP制裁强行背锅...
  3. 用图表说话 麦肯锡 pdf下载_揭秘麦肯锡顾问百万年薪背后的逻辑,麦肯锡「方法论」系列大合集...
  4. MySQL批量更改数据库表结构字符集
  5. python树结构_Python-简单的树结构实现
  6. java代码解锁华为_如何编写可怕的Java代码?
  7. netty依赖_高性能:《一遍文章带你看懂 Netty世界》
  8. nginx alias
  9. Eclipse中svn插件:Subclipse插件安装
  10. mysql command为sleep时项目可以连接_Mysql中Sleep进程连接数过多问题解决