gpt4 book ai didi

linux - Python 库分发的 SO 文件里面有什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:40 25 4
gpt4 key购买 nike

have a library ,它由 3 个文件组成,这些文件旨在放置在站点 python 目录中。

FbxCommon.py
fbxsip.so
fbx.so

一旦这些文件就位,Python 就可以看到 fbx 包。这个系统是如何工作的? SO 文件里面有什么?

如果它是一个 DLL,它怎么会依赖于 python 版本(它适用于 python 3.3 但不适用于 python 3.5)

更新

识别码如下

from fbx import *
lSdkManager = FbxManager.Create()

在 Python 3.3 上它什么都不做,而在 Python 3.5 上它抛出这个错误:

Traceback (most recent call last):
File "/opt/pycharm-2017.2.2/helpers/pydev/pydevd.py", line 1599, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "/opt/pycharm-2017.2.2/helpers/pydev/pydevd.py", line 1026, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/opt/pycharm-2017.2.2/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/home/dims/PycharmProjects/FBXCheck/fbxcheck.py", line 2, in <module>
lSdkManager = FbxManager.Create()
AttributeError: type object 'FbxManager' has no attribute 'Create'

最佳答案

Windows 上的 .PYD 文件是带有 Python 接口(interface)的 .DLL。

在 Linux 上,这两者都使用 .SO 作为扩展名。所以您的文件可能是具有 Python 接口(interface)(init 函数等)的 Linux 二进制文件,这就是为什么它们可以简单地由 Python 导入,而无需使用 ctypes 或类似的东西。

编译时,这些扩展模块需要链接到 Python 的相应 .so(Windows 上的 .dll),因此在这种情况下可能使用了 python33.so。运行 Python 3.5 时,无法解析对 python33.so 的引用,因为只加载了 python35.so。所以失败了。您将需要使用专门链接到您的 Python 版本的版本。

更新

我刚刚尝试在 Windows 上使用 Python 3.6 导入相同的模块,这给了我

ImportError: DLL load failed: The specified module could not be found.

这正是我对运行错误的 Python 版本的期望。

也许在您的安装中 python33.so 存在于其他地方,然后被发现并加载,但由于您实际上是从 Python 3.5 运行的,它拒绝初始化,包括模块的初始化,稍后会导致错误。

我猜你在没有正确版本的 Python 解释器的情况下运行这些库是不走运的。也许看看virtualenv如果您希望能够轻松地交换版本。

关于linux - Python 库分发的 SO 文件里面有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com