2012-11-13 20 views
16

Sto eseguendo un'applicazione in un ambiente virtuale che richiede l'accesso a DBus (principalmente per interagire con Network Manager).Installa Python-Dbus in virtualenv

Ho provato a installare Dbus-Python con easyinstall e pip, ma entrambi falliscono.

Quando provo a fare questo:

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

Pip mi grida con:

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 

Ho avuto alcuni problemi con le associazioni di pitone dbus e la loro "accessibilità" dal mio Python moduli in passato, quindi non so davvero quale potrebbe essere il modo migliore per impostare Dbus-Python in un ambiente virtuale. Qualcuno ha raggiunto con successo questo? O qualcuno ha un'idea su come farlo?

Grazie in anticipo.

risposta

14

Quando pip tenta di installare un pacchetto, sembra per setup.py, che dbus-python non ha, quindi dovrete download the source e compilarlo manualmente. Non dovrebbe essere troppo difficile:

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

quindi puoi spostare i file compilati sul tuo virtualenv.


modifica: iniziano dbus-python-1.2.2 (rilasciato 2016/02/22) dbus-python ha una setup.py, così pip dovrebbe essere in grado di installare

11

mio suggerimento è di installare il pacchetto di sistema per i binding Python DBUS e quindi creare il virtualenv con l'opzione di riga --system-site-packages comando per consentire l'accesso ai pacchetti Python livello di sistema (incluso il pacchetto dbus) dalla attivata virtualenv. Per esempio su Debian/Ubuntu (o una distribuzione derivata):

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

Il PO risulta avere ha aperto un ticket on freedesktop.org per questo, che rimane aperto; tuttavia esiste un patch attached to that ticket che può essere applicato a qualsiasi versione di python-dbus e quindi riconfezionato come nuovo tarball.

+0

Oh! Quello non ero io. Non avevo visto quella patch, ma grazie per le informazioni :) – BorrajaX

+1

Posso confermare che funziona correttamente per 'dbus-python == 1.2.4' in virtualenv. Costruirlo con successo ha bisogno di sudo apt-get install libdbus-glib-1-dev libdbus-1-dev' – TheMeaningfulEngineer

+1

Grazie a @TheMeaningfulEngineer, il tuo commento ha risposto a questa domanda per me. – justfortherec

8

Un'altra soluzione è quella di copiare solo manualmente i file dbus/librerie direttamente sul tuo 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

Mi piace questa idea dato che molti sistemi avranno dbus-python a causa di script usati internamente e può funzionare bene con lo script 'postmkvirtualenv' di virtualenvwrapper. – Tatsh

+0

Mentre questa soluzione non è esattamente ciò che definirei perfettamente pulito, mi piace per semplicità. Upvoting. :-) – Drachenfels