【发布时间】:2020-04-24 15:12:50
【问题描述】:
我正在为 virtualbox (pyvbox) 使用 Python3 绑定。它适用于我系统的初始 python3 版本,即 3.7。现在,我想使用与 python3.8 完全相同的绑定。我已经安装了所有需要的 python3.8 包,但是我得到了这个错误:
$ python3
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 9.2.1 20191008] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import virtualbox
>>> _vbox = virtualbox.VirtualBox()
m=VBoxPython3_8 x=No module named 'VBoxPython3_8'
m=VBoxPython3 x=No module named 'VBoxPython3'
m=VBoxPython x=/usr/lib/virtualbox/VBoxPython.so: undefined symbol: _Py_ZeroStruct
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home//.local/lib/python3.8/site-packages/virtualbox/library_ext/vbox.py", line 22, in __init__
manager = virtualbox.Manager()
File "/home//.local/lib/python3.8/site-packages/virtualbox/__init__.py", line 145, in __init__
self.manager = vboxapi.VirtualBoxManager(mtype, mparams)
File "/usr/local/lib/python3.8/dist-packages/vboxapi/__init__.py", line 989, in __init__
self.platform = PlatformXPCOM(dPlatformParams)
File "/usr/local/lib/python3.8/dist-packages/vboxapi/__init__.py", line 750, in __init__
import xpcom.vboxxpcom
File "/usr/lib/virtualbox/sdk/bindings/xpcom/python/xpcom/vboxxpcom.py", line 78, in <module>
raise Exception('Cannot find VBoxPython module (tried: %s)' % (', '.join(_asVBoxPythons),))
Exception: Cannot find VBoxPython module (tried: VBoxPython3_8, VBoxPython3, VBoxPython)
我发现这些模块必须在/usr/lib/virtualbox,目前只包含这些文件:
$ ls /usr/lib/virtualbox/ | grep VBoxPython
VBoxPython2_7.so
VBoxPython3_7m.so
VBoxPython.so
这些 .so 文件通过 virtualbox 包安装。但是,我无法通过重新安装既没有VBoxPython3.so 也没有VBoxPython3.8.so。我查看了virtualbox代码,似乎c宏PY_VERSION_HEX表示3.7而不是3.8,这可能是由于包含错误的Python.h标头造成的。
如何强制 virtualbox 包包含 /usr/include/python3.8/Python.h 而不是 /usr/include/python3.7/Python.h ?
卸载 python3.7 不是一个选项。
【问题讨论】:
-
你试过为python 3.8创建虚拟环境并运行吗?
标签: python-3.x virtualbox python-3.7 python-3.8