【问题标题】:Is it possible to use the python3 bindings for VirtualBox?是否可以为 VirtualBox 使用 python3 绑定?
【发布时间】:2017-06-10 19:34:09
【问题描述】:

我正在尝试使用 python 3 绑定到 VirtualBox,但似乎存在损坏的依赖关系。对我来说这似乎很奇怪,在人们遇到这个问题的大约 4 年里,这个问题还没有得到解决。也许我错过了一些明显的东西。众所周知。

我已经通过我的操作系统的包管理器安装了 virtualbox 主机模块、sdk 和扩展。然后,通过 pip:

pip install pyvbox

导入工作:

from virtualbox import VirtualBox, Session, Manager, WebServiceManager

但是任何实例化任何东西的尝试都会导致异常,抱怨缺少vboxapi

box = VirtualBox()

追溯:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python3.6/site-packages/virtualbox/library_ext/vbox.py", line 22, in __init__
    manager = virtualbox.Manager()
  File "/usr/lib/python3.6/site-packages/virtualbox/__init__.py", line 130, in __init__
    with import_vboxapi() as vboxapi:
  File "/usr/lib/python3.6/contextlib.py", line 82, in __enter__
    return next(self.gen)
  File "/usr/lib/python3.6/site-packages/virtualbox/__init__.py", line 45, in import_vboxapi
    import vboxapi
  File "/home/$USER/.eclipse/org.eclipse.platform_4.6.3_155965261_linux_gtk_x86_64/plugins/org.python.pydev_5.7.0.201704111357/pysrc/_pydev_bundle/pydev_import_hook.py", line 20, in do_import
    module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'vboxapi'

PyPi 上有一个vboxapi,但它不会安装,因为没有与之关联的代码,PyPi 页面上也没有任何有用的信息: https://pypi.python.org/pypi/vboxapi

这里有几个链接指向比我更勇敢的灵魂的英勇努力。鉴于它们分别来自 3 年和 4 年前,我并不清楚哪个是正确的解决方案,或者是否仍然相关。

https://github.com/GreatFruitOmsk/vboxapi-py3

https://github.com/jbuergel/vboxapi-py3

同样从 3 年前开始,一个 vboxapi.diff 和集成到 vboxapi 中的词:

https://www.virtualbox.org/pipermail/vbox-dev/2014-April/012231.html

【问题讨论】:

  • 您可以尝试在the Github page 上提出问题,因为那里似乎有活动。有一个与您类似的老问题,但唯一的建议是安装 VirtualBox SDK。
  • @BrenBarn 好的,谢谢,我会这样做的!
  • @BrenBarn 我也阅读了该建议并安装它却发现它已经安装了。
  • 你能试试我的方法吗,对我来说现在可以了(Ubuntu 18.04 / Python 3.6 / VirtualBox 6.0)

标签: python python-3.x virtualbox


【解决方案1】:

我是pyvbox 包的当前维护者。 VirtualBox SDK 已经支持 Python 3,我使用 Python 3.5 开发库。我建议卸载并重新安装最新版本的 SDK(在撰写本文时为 5.1.22)。

您可以在 VirtualBox downloads page 上找到 SDK。解压缩存档并使用您的系统 Python 使用以下命令运行 vboxapisetup.py 文件:

python vboxapisetup.py install

您不需要在任何 virtualenv 中安装它,因为pyvbox 会搜索您的系统库以及 virtualenv 安装,以便更好地使用。

如果您在运行这些步骤后在使用pyvbox 包时遇到问题,请打开一个问题并包含尽可能多的信息,包括您采取的步骤、操作系统、您的系统 Python 所在的位置、VirtualBox 和 SDK 的版本您正在使用,我会尽力帮助您。

【讨论】:

  • 赞成。不确定我是否理解这一点:“除了 virtualenv 安装之外,pyvbox 还会搜索您的系统库,以便更好地使用”。我认为 virtualenv 背后的整个想法是不要在 virtualenv 之外做任何事情......但也许我错了,在这种情况下我欢迎解释。
  • 我们基本上必须使用安装在系统 Python 中的 VirtualBox SDK。从技术上讲,您可以将其安装在 virtualenv 中,但我怀疑我们的大多数用户希望在每次创建新的 virtualenv 时都能找到他们的 vboxapisetup.py 文件,因此我们为我们的 API 绑定创建了库搜索系统库。跨度>
  • 我明白了……这个 virtualenv 的东西一天比一天臭了。我会在一个容器中运行这一切......哦等等...... :-)
  • 这是否适用于portable version?到目前为止没有太大的成功。
  • 我没有用便携版测试过。如果您有空余时间,我会很高兴您在 GitHub 存储库上提交问题,其中包含您拥有的所有信息以及您尝试过的所有信息,并且我或其他人都可以查看它。
【解决方案2】:

是的,你可以,这可能,设置起来非常棘手,但它现在对我来说工作正常(Ubuntu 18.04 / python3.6 / virtualbox 6.0)。


错误:

ModuleNotFoundError: No module named 'vboxapi'

表示python3 没有找到vboxapi 模块,现在有两种方法可以将vboxapi 包“强制安装”到python3


第一种方法 [简单]:假设 pyvbox 已经安装并且可以在 python2.7 上正常工作,在这种情况下,您可以简单地将包从 python2.7 dist-packages 复制到 python3 dist - 包装:

sudo cp -r /usr/lib/python2.7/dist-packages/vboxapi /usr/lib/python3/dist-packages

第二种方法【比较棘手】:去VirtualBox,然后下载最后一个Software Developer Kit (SDK),其实是6.0.4

解压存档并使用 Python3 运行vboxapisetup.py 文件,命令如下:

sudo python3 vboxapisetup.py install

你会遇到这个问题:

Traceback (most recent call last):
  File "vboxapisetup.py", line 90, in <module>
    main(sys.argv)
  File "vboxapisetup.py", line 63, in main
    raise Exception("No VBOX_INSTALL_PATH defined, exiting")
Exception: No VBOX_INSTALL_PATH defined, exiting

您可以直接编辑当前文件vboxapisetup.py并将第57行替换为vboxDest = os.environ.get("VBOX_MSI_INSTALL_PATH", None)vboxDest = "/usr/lib/virtualbox"

然后再次运行:

sudo python3 vboxapisetup.py install

现在你会得到类似的东西:

running install
running build
running build_py
copying vboxapi/__init__.py -> build/lib/vboxapi
running install_lib
creating /usr/local/lib/python3.6/dist-packages/vboxapi
copying build/lib/vboxapi/__init__.py -> /usr/local/lib/python3.6/dist-packages/vboxapi
copying build/lib/vboxapi/VirtualBox_constants.py -> /usr/local/lib/python3.6/dist-packages/vboxapi
byte-compiling /usr/local/lib/python3.6/dist-packages/vboxapi/__init__.py to __init__.cpython-36.pyc
byte-compiling /usr/local/lib/python3.6/dist-packages/vboxapi/VirtualBox_constants.py to VirtualBox_constants.cpython-36.pyc
running install_egg_info
Removing /usr/local/lib/python3.6/dist-packages/vboxapi-1.0.egg-info
Writing /usr/local/lib/python3.6/dist-packages/vboxapi-1.0.egg-info

这意味着 我们可以安装vboxapi 包!


现在,让我们再次尝试在 python3 中加载 virtualbox():

from virtualbox import VirtualBox, Session, Manager, WebServiceManager
box = VirtualBox()

这可能会引发这个新问题:

Traceback (most recent call last):
  File "virtualbox_python3_test.py", line XX, in <module>
    vbox = virtualbox.VirtualBox()
  File "/usr/local/lib/python3.6/dist-packages/virtualbox/library_ext/vbox.py", line 22, in __init__
    manager = virtualbox.Manager()
  File "/usr/local/lib/python3.6/dist-packages/virtualbox/__init__.py", line 143, in __init__
    self.manager = vboxapi.VirtualBoxManager(mtype, mparams)
  File "/usr/local/lib/python3.6/dist-packages/vboxapi/__init__.py", line 989, in __init__
    self.platform = PlatformXPCOM(dPlatformParams)
  File "/usr/local/lib/python3.6/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_6m, VBoxPython3m, VBoxPython)

如果你挖掘你会发现很多关于这个问题的问题(question 1,question 2,question 3,question 4等等...)在网络上...

但根据我的挖掘和研究,如果你很幸运(并且有一个使用 python3 原生支持构建的 Virtualbox),你可以尝试:

cd /usr/lib/virtualbox/
sudo cp VBoxPython3_5m.so VBoxPython3_6m.so

但是如果出现以下错误:

cp: cannot stat 'VBoxPython3_5m.so': No such file or directory

这意味着你在 Virtualbox 中没有原生 python3 支持...

可以这样解决:

转到here 并下载the python3-virtualbox-5.2.16 binary package(我们不关心VirtualBox 版本...)

现在打开python3-virtualbox-5.2.16-lp150.4.11.1.x86_64.rpm存档,浏览到/./usr/lib/virtualbox/,然后解压文件VBoxPython3_6m.so,然后把这个文件放到你当前的工作目录中,然后你必须从这个目录中做:

sudo cp VBoxPython3_6m.so /usr/lib/virtualbox/

现在,您可以为 virtualbox 使用 python3 绑定

【讨论】:

  • 请注意,某些“virtualbox”模块功能将无法正常工作,主要是由于python2和python3之间的差异(例如字符串表示,请查看此问题stackoverflow.com/questions/55088041/…
  • A 确实同意 A STEFANI。此外,最好导出或简单设置所需的环境变量,而不是编辑源:sudo VBOX_INSTALL_PATH=/usr/lib/virtualbox python3 vboxapisetup.py install - 为我工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多