在虚拟环境中安装Python-Dbus

25

我正在虚拟环境中运行一个应用程序,需要访问DBus(主要是与网络管理器进行交互)。

我尝试使用easyinstall和pip安装Dbus-Python,但都失败了。

当我尝试执行以下操作时:

(myvirtualenv)borrajax@borrajax-computer:~/Documents/Projects/VirtualEnvs/current_env$ bin/pip install dbus-python

Pip高声责备我:

Downloading/unpacking dbus-python
  Downloading dbus-python-1.1.1.tar.gz (596kB): 596kB downloaded
  Running setup.py egg_info for package dbus-python
    Traceback (most recent call last):
      File "<string>", line 16, in <module>
    IOError: [Errno 2] No such file or directory: '/home/borrajax/Documents/Projects/VirtualEnvs/current_env/build/dbus-python/setup.py'
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 16, in <module>

IOError: [Errno 2] No such file or directory: '/home/borrajax/Documents/Projects/VirtualEnvs/current_env/build/dbus-python/setup.py'

----------------------------------------
Command python setup.py egg_info failed with error code 1 in /home/borrajax/Documents/Projects/VirtualEnvs/current_env/build/dbus-python
Storing complete log in /home/borrajax/.pip/pip.log

我之前在Python模块中使用Python dbus绑定时遇到了一些问题,因此我不太清楚在虚拟环境中设置Dbus-Python的最佳方法是什么。有人能成功实现吗?或者有没有任何想法可以做到这一点?

7个回答

23

按照以下2个步骤进入您的虚拟环境:

sudo apt-get install libdbus-glib-1-dev libdbus-1-dev

pip install dbus-python

验证方式:

pip freeze
如果安装正确,您会看到:dbus-python == 1.2.8

20

我的建议是安装Python DBUS绑定的系统包,然后使用--system-site-packages命令行选项创建virtualenv,以便从已激活的virtualenv访问系统范围内的Python包(包括dbus包)。例如,在Debian/Ubuntu(或派生发行版)上:

$ sudo apt-get install python-dbus
$ virtualenv --system-site-packages dbus-venv

如果想使用内置的Python 3 venv 模块而不是 virtualenv

$ sudo apt-get install python-dbus
$ sudo apt-get install python3-venv
$ python3 -m venv --system-site-packages my_venv

15

pip 尝试安装一个包时,它会寻找 setup.py 文件,但 dbus-python 并没有这个文件,因此您需要手动下载源代码并进行编译。应该不会太难:

PYTHON=python3.3 ./configure --prefix=/tmp/dbus-python
make
make install

然后,您可以将编译后的文件移动到您的虚拟环境中。


编辑:从dbus-python-1.2.2开始(发布于2016-02-22),dbus-python具有setup.py,因此pip应该能够安装它。


10

另一个解决方法是手动将 dbus 文件/库直接复制到您的虚拟环境中:

cp -r /usr/lib/pythonX.X/{site or dist}-packages/dbus myvirtenv/usr/lib/pythonX.X/site-packages/    
cp -r /usr/lib/pythonX.X/{site or dist}-packages/_dbus_*.so myvirtenv/usr/lib/pythonX.X/site-packages/

2
我喜欢这个想法,因为许多系统将使用dbus-python来运行内部脚本,并且它可以很好地与virtualenvwrapper的postmkvirtualenv脚本配合使用。 - Tatsh
虽然这个解决方案并不完全符合我所谓的完美干净,但我喜欢它的简单性。点赞。 :-) - Drachenfels

7

OP似乎在freedesktop.org上开了一个关于此问题的工单,该工单仍然保持打开状态;但是,该工单中有一个补丁可以应用于大多数python-dbus版本,然后重新打包为新的tarball。


哦!那不是我。我还没看到那个补丁,但谢谢你的信息 :) - Savir
1
可以确认在虚拟环境中,dbus-python==1.2.4 的工作是正确的。成功构建需要安装 sudo apt-get install libdbus-glib-1-dev libdbus-1-dev - TheMeaningfulEngineer
1
谢谢@TheMeaningfulEngineer,你的评论为我解答了这个问题。 - justfortherec

3

@TheMeaningfulEngineer,非常感谢,我一直在通过pip安装dbus时遇到一些问题,这正是我需要的。希望无论您身在何处,都能有愉快的一天;)

要检查本地是否存在,请使用以下命令 - sudo apt list --installed | grep package-name

sudo apt-get install libdbus-glib-1-dev libdbus-1-dev

在这一行之后,我安装了dbusnetworkmanager,没有出现任何错误。

这就是我所做的事情,之前我检查了所有的dbus版本和networkmanager,按照@TheMeaningfulEngineer的建议操作后可以正常运行。


这篇帖子似乎没有提供一个质量高的答案来回答问题。请编辑您的回答,或只是将其作为评论发布到问题中。 - sɐunıɔןɐqɐp

0

对于 Python,由于 dbus-python 已经过时,您应该使用 pydbus


pip install pydbus

这对我有用。


它真的过时了吗?如果您查看发布说明,您会发现比pydbus更新的版本:https://dbus.freedesktop.org/doc/dbus-python/news.html - Joël Esponde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接