Domanda

Ultimamente ho usato virtualenv mentre sviluppavo in Python. Mi piace l'idea di un ambiente di sviluppo separato che utilizza l'opzione --no-site-pacchetti, ma farlo durante lo sviluppo di un'app PyGTK può essere un po 'complicato. I moduli PyGTK sono installati su Ubuntu per impostazione predefinita e vorrei rendere un virtualenv (con --no-site-pacchetti) a conoscenza di moduli specifici che si trovano in altre parti del sistema.

Qual è il modo migliore per farlo? O dovrei semplicemente succhiarlo e rilasciare l'opzione --no-site-pacchetti?

È stato utile?

Soluzione

$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv
$ cd myvirtualenv
$ source bin/activate
$ cd lib/python2.6/
$ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/ 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.pth 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.py 
$ ln -s /usr/lib/pymodules/python2.6/cairo/
$ python
>>> import pygtk
>>> import gtk

Altri suggerimenti

Un modo è aggiungere i percorsi al tuo codice usando sys.path.

import sys

sys.path.append(somepath)

Un altro modo è usare il sito, che elabora i file .pth oltre ad aggiungerli a sys.path.

import site

site.addsitedir(sitedir, known_paths=None)

https://docs.python.org/library/site.html

Ma probabilmente non vuoi aggiungerlo a tutto il tuo codice correlato.

Ho visto la menzione di sitecustomize.py utilizzato per eseguire qualcosa del genere, ma dopo alcuni test non sono riuscito a farlo funzionare come previsto.

Qui menziona che l'importazione automatica di sitecustomize.py è terminata in 2.5, se non sei in 2.5 provalo. (basta aggiungere uno dei percorsi sopra indicati al file e rilasciarlo nella directory in cui è eseguito il programma) Un metodo per aggirare è menzionato nel post per gli utenti da 2,5 in su.

http://code.activestate.com/recipes/552729/

Trovo che in questa situazione i collegamenti simbolici o persino la copia di file specifici (pacchetti, moduli, estensioni) funzionino davvero bene.

Permette al programma di emulare l'esecuzione nell'ambiente di destinazione, piuttosto che modificare l'applicazione per adattarla all'ambiente di sviluppo.

Stesso affare per qualcosa come AppEngine.

Controlla lo script hook postmkvirtualenv qui:

https://stackoverflow.com/a/9716100/60247

In quel caso, lo sta usando per importare PyQt e SIP dopo aver creato un nuovo Virtualenv, ma è possibile aggiungere i pacchetti necessari a LIBS.

E vota lo script perché è fantastico :)

Se vuoi includere i collegamenti al python di sistema pertinente gtk-2.0 nel virtualenv, puoi semplicemente usare pip per installare ruamel.venvgtk :

pip install ruamel.venvgtk Non devi importare nulla, i collegamenti vengono impostati durante l'installazione.

Questo è particolarmente utile se stai usando tox , in quel caso devi solo includere la dipendenza (per tox):

deps:
    pytest
    ruamel.venvgtk

e un ambiente python2.7 appena configurato includeranno i collegamenti pertinenti prima dell'esecuzione dei test.

Informazioni più dettagliate su come impostare i collegamenti sono disponibili in questa risposta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top