2008-10-30 9 views
24

Używam virtualenv ostatnio podczas rozwijania w Pythonie. Podoba mi się pomysł wydzielonego środowiska programistycznego z opcją --no-site-packages, ale zrobienie tego podczas tworzenia aplikacji PyGTK może być nieco trudne. Moduły PyGTK są domyślnie instalowane w systemie Ubuntu i chciałbym, aby virtualenv (z pakietami --no-site) był świadomy określonych modułów znajdujących się w innym miejscu systemu.Virtualenv na Ubuntu bez pakietów witryn

Jaki jest najlepszy sposób na zrobienie tego? Czy powinienem po prostu wyssać i opuścić opcję --no-site-packages?

Odpowiedz

34
$ 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 
+8

To postawiło mnie na dobrej drodze, ale rzeczy nieco się zmieniły w Ubuntu 11.10. W przypadku Pythona 2.7 w Ubuntu 11.10, coś bardziej podobnego do tego: ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth} lib/python2 .7/site-packages – keturn

+2

Uwaga: Foldery gtk i pth muszą być umieszczone w lib/python2.6/site-packages, a nie lib/python2.6. Zobacz: http://stackoverflow.com/questions/3580520/python-virtualenv-gtk-2-0 – jmanning2k

+2

Oto mała edycja do wersji keturns, aby użyć env var: $ ln -sf /usr/lib/python2.7/ dist-packages/{glib, gobject, cairo, gtk-2.0, pygtk.py, pygtk.pth} $ VIRTUAL_ENV/lib/python2.7/site-packages –

4

Jednym ze sposobów jest dodanie ścieżek do kodu przy użyciu sys.path.

import sys 

sys.path.append(somepath) 

Innym sposobem jest użycie strony, która przetwarza pliki .pth oprócz dodania do sys.path.

import site 

site.addsitedir(sitedir, known_paths=None) 

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

Ale pewnie nie chcesz dodać do całego powiązanego kodu.

Widziałem wzmiankę o sitecustomize.py używanym do wykonania czegoś podobnego, ale po kilku testach nie mogłem go uruchomić tak, jak można się było spodziewać.

Tutaj wspomniano, że autoprzesyłanie witryny sitecustomize.py zakończyło się wynikiem 2,5, jeśli nie jesteś na 2.5 spróbuj. (po prostu dodaj jedną z powyższych metod dodawania ścieżek do pliku i upuść go w katalogu, w którym uruchomiony jest twój program). Wymieniona metoda jest wymieniona we wpisie dla użytkowników 2.5 i wyżej.

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

1

znajdę się w takiej sytuacji, dowiązania symboliczne, a nawet kopiowanie wybranych plików (paczki, moduły, rozszerzenia) działa bardzo dobrze.

Umożliwia emulację programu w środowisku docelowym, zamiast zmieniać aplikację w celu dostosowania do środowiska programistycznego.

To samo dotyczy czegoś takiego jak AppEngine.

+0

Yeh, ale dowiązania gdzie? I czego potrzebowałbym do dowiązania symbolicznego do czegoś takiego jak PyGTK? –

+0

Link do pakietów witryny. Na moim Ubuntu mam /usr/lib/python-support/python-gtk2/python2.5/gtk-2.0/gtk. Są tam już /var/lib/python-support/python2.5/gtk-2.0/gtk linki. Wydaje się być dobrym początkiem i może zaistnieć potrzeba prób i błędów. Ale będziesz mógł napisać to po raz kolejny. –

1

Wyjazd skrypt hak postmkvirtualenv tutaj:

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

W takim przypadku, że używa go do importowania PyQt i SIP po nowej virtualenv jest tworzony, ale można dodać te pakiety, które potrzebujesz LIBS.

i zagłosuj tego skryptu, bo to fantastyczne :)

0

Jeśli chcesz zawierać linki do odpowiedniego systemu python gtk-2.0 w virtualenv, można po prostu użyć pip zainstalować ruamel.venvgtk:

pip install ruamel.venvgtk Nic nie importujesz, linki są instalowane podczas instalacji.

Jest to szczególnie przydatne, jeśli używasz tox, w tym przypadku trzeba tylko to zależność (dla tox):

deps: 
    pytest 
    ruamel.venvgtk 

i środowisko nowo setup python2.7 będą miały odpowiednie linki zawarte przed uruchomieniem testów.

Bardziej szczegółowe informacje o tym, jak linki są konfiguracji można znaleźć w this answer