Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python3中使用Python2中的.so模块?_Python_Linux_Shared Libraries_Python Module - Fatal编程技术网

如何在Python3中使用Python2中的.so模块?

如何在Python3中使用Python2中的.so模块?,python,linux,shared-libraries,python-module,Python,Linux,Shared Libraries,Python Module,也许我的问题很明显,但我没能找到一个明显的决定 有一些Python 2.6+扩展名为audit和auparse。这些是随审计库python包分发的动态库: [vitaly@thermaltake tmp]$ repoquery -lq audit-libs-python /usr/lib64/python2.7/site-packages/_audit.so /usr/lib64/python2.7/site-packages/audit.py /usr/lib64/python2.7/site

也许我的问题很明显,但我没能找到一个明显的决定

有一些Python 2.6+扩展名为auditauparse。这些是随审计库python包分发的动态库:

[vitaly@thermaltake tmp]$ repoquery -lq audit-libs-python
/usr/lib64/python2.7/site-packages/_audit.so
/usr/lib64/python2.7/site-packages/audit.py
/usr/lib64/python2.7/site-packages/audit.pyc
/usr/lib64/python2.7/site-packages/audit.pyo
/usr/lib64/python2.7/site-packages/auparse.so
我想在最新的Python解释器中使用这个扩展,因为它是一个。由于某些原因,我无法从Python 3.3加载它们:

[vitaly@thermaltake ~]$ python3.3
Python 3.3.2 (default, Mar  5 2014, 08:21:05) 
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/usr/lib64/python2.7/site-packages/")
>>> import auparse
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/lib64/python2.7/site-packages/auparse.so: undefined symbol: _Py_ZeroStruct
>>> import audit
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/audit.py", line 28, in <module>
    _audit = swig_import_helper()
  File "/usr/lib64/python2.7/site-packages/audit.py", line 24, in swig_import_helper
    _mod = imp.load_module('_audit', fp, pathname, description)
  File "/usr/lib64/python3.3/imp.py", line 183, in load_module
    return load_dynamic(name, filename, file)
ImportError: /usr/lib64/python2.7/site-packages/_audit.so: undefined symbol: PyInstance_Type
[vitaly@thermaltake~]$python3.3
Python 3.3.2(默认值,2014年3月5日,08:21:05)
linux上的[GCC 4.8.2 20131212(Red Hat 4.8.2-7)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入系统
>>>sys.path.append(“/usr/lib64/python2.7/site packages/”)
>>>导入auparse
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
导入错误:/usr/lib64/python2.7/site-packages/auparse.so:未定义的符号:_Py_ZeroStruct
>>>进口审核
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib64/python2.7/site packages/audit.py”,第28行,在
_audit=swig\u import\u helper()
swig\u import\u helper中的文件“/usr/lib64/python2.7/site packages/audit.py”,第24行
_mod=imp.load\u模块(“审计”,fp,路径名,描述)
加载模块中的文件“/usr/lib64/python3.3/imp.py”,第183行
返回加载动态(名称、文件名、文件)
ImportError:/usr/lib64/python2.7/site-packages//\u audit.so:未定义符号:PyInstance\u类型

如果有人能澄清将此类模块导入现代Python解释器的过程,我将非常高兴。很难相信在这种情况下,第二和第三分支之间的向后兼容性也被破坏了。谢谢。

。因此,必须为每个特定的Python版本编译
模块-您甚至不能重用为Python2.6和Python2.7构建的模块

当转换到Python3时,情况会变得更糟,因此不会从.C文件中构建不变的SO(可能有例外)

一种解决方法是使用xmlrpc为您希望在2.6模块中使用的函数提供服务,然后从运行Python3.x的单独Python进程调用,这应该是最简单的方法