Vit*_*aev 3 python linux python-module shared-libraries
可能我的问题很明显,但我找不到明显的决定。
有 Python 2.6+ 扩展名为audit和auparse。这些是与audit-libs-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
Run Code Online (Sandbox Code Playgroud)
我想在最新的 Python 解释器中使用这个扩展,因为怀疑在 python 2.6+ 中对动态内存的处理不正确。出于某种原因,我无法从 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
Run Code Online (Sandbox Code Playgroud)
如果有人能澄清将此类模块导入现代 Python 解释器的过程,我会很高兴。很难相信在这种情况下,第二个和第三个分支之间的向后兼容性也被破坏了。谢谢你。
.so必须为每个特定的 Python 版本编译模块——你甚至不能.so在 Python 2.7 中重用为 Python 2.6 构建的模块。
当过渡到 Python 3 时,情况会变得更糟,因为有一些 API 更改,并且 SO 根本不会从 .C 文件中构建不变(可能有例外)。
一种解决方法是使用 xmlrpc 为您想要在 2.6 模块中使用的函数提供服务,然后从运行 Python 3.x 的单独 Python 进程调用然后 - 这应该是最简单的方法。
| 归档时间: |
|
| 查看次数: |
3203 次 |
| 最近记录: |