2012-11-13 30 views
16

Używam aplikacji w środowisku wirtualnym, które potrzebuje dostępu do DBus (głównie do interakcji z Menedżerem sieci).Zainstaluj Python-Dbus w virtualenv

Próbowałem zainstalować Dbus-Python z easyinstall i pip, ale oba zawodzą.

Kiedy próbuję to zrobić:

(myvirtualenv)[email protected]:~/Documents/Projects/VirtualEnvs/current_env$ bin/pip install dbus-python 

Pip krzyczy na mnie:

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 

miałem pewne problemy z wiązaniami python dbus i ich "dostępność" od mojego Pythonie moduły w przeszłości, więc tak naprawdę nie wiem, jaki może być najlepszy sposób ustawienia Dbus-Pythona w środowisku wirtualnym. Czy ktoś z powodzeniem to osiągnął? A może ktoś ma pomysł, jak to zrobić?

Z góry dziękuję.

Odpowiedz

14

Kiedy pip próbuje zainstalować pakiet, to wygląda na setup.py, który dbus-python nie ma, więc trzeba go skompilować i download the source ręcznie. Nie powinno to być zbyt trudne:

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

następnie można przenieść skompilowane pliki do virtualenv.


edycja: od dbus-pytona-1.2.2 (wydany 2016-02-22) dbus-pyton ma setup.py tak PIP powinien mieć możliwość zainstalowania go

11

Moja propozycja jest taka, aby zainstalować pakiet system powiązań Python DBus a następnie utworzyć virtualenv z linii poleceń opcji --system-site-packages aby umożliwić dostęp do pakietów Pythona całego systemu (w tym pakiecie dbus) z aktywowaną virtualenv. Na przykład na Debian/Ubuntu (lub dystrybucji pochodnych):

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

PO wydaje się mieć otworzył do tego ticket on freedesktop.org, który pozostaje otwarty; jednak istnieje patch attached to that ticket, który można zastosować do większości wersji Pythona-Dbus, a następnie przepakować go jako nowy plik.

+0

Oh! To nie byłem ja. Nie widziałem tej łatki, ale dziękuję za informację :) – BorrajaX

+1

Potwierdzam, że działa poprawnie dla 'dbus-python == 1.2.4' w virtualenv. Budowanie jej z powodzeniem wymaga 'sudo apt-get install libdbus-glib-1-dev libdbus-1-dev' – TheMeaningfulEngineer

+1

Dzięki @TheMeaningfulEngineer, twój komentarz odpowiedział na to pytanie dla mnie. – justfortherec

8

Innym rozwiązaniem jest po prostu ręcznie skopiować dbus plików/bibliotek bezpośrednio do virtualenv:

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

Podoba mi się ten pomysł, ponieważ wiele systemów będzie miało dbus-python ze względu na wewnętrzne skrypty i może działać dobrze ze skryptem 'postmkvirtualenv' virtualenvwrapper. – Tatsh

+0

Chociaż to rozwiązanie nie jest dokładnie tym, co scharakteryzowałbym jako idealnie czyste, to lubię je dla prostoty. Awans. :-) – Drachenfels