Installer PyGtk dans virtualenv
donc j'essaie d'exécuter un exemple simple de matplotlib dans mon virtualenv (dans la console). Voici le code:
import matplotlib
matplotlib.use('GTKAgg')
import matplotlib.pyplot as plt
radius = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
area = [3.14159, 12.56636, 28.27431, 50.26544, 78.53975, 113.09724]
plt.plot(radius, area)
plt.show()
cependant, quand j'exécute ceci j'obtiens:
ImportError: Gtk* backend nécessite pygtk pour être installé.
et maintenant la fête commence. J'ai essayé de pip installer pygtk mais il lance:
********************************************************************
* Building PyGTK using distutils is only supported on windows. *
* To build PyGTK in a supported way, read the INSTALL file. *
********************************************************************
Complete output from command python setup.py egg_info:
********************************************************************
j'ai vérifié le fichier INSTALL
et j'ai dit d'essayer ./configfure; make; make install
. Cependant. Je ne suis pas tout à fait sûr de savoir comment faire cela au sein de virtualenv. Où dois-je déballer les sources pour pygtk afin d'être installé dans virtualenv.
5 réponses
le truc est de régler manuellement les bons chemins et ensuite d'exécuter configure à l'intérieur du virtualenv. C'est assez basique, mais il a travaillé pour moi.
installez python-config dans l'env virtuel et liez-le à python2.7-config:
pip install config
ln -s /home/PATH/TO/VIRT/bin/python-config /home/PATH/TO/VIRT/bin/python2.7-config
Installer le caire dans le virtuel env:
wget http://cairographics.org/releases/py2cairo-1.10.0.tar.bz2
tar -xf py2cairo-1.10.0.tar.bz2
cd py2cairo-1.10.0
./waf configure --prefix=/home/PATH/TO/VIRT/
./waf build
./waf install
Install PyGTK
wget http://pypi.python.org/packages/source/P/PyGTK/pygtk-2.24.0.tar.bz2
tar -xf pygtk-2.24.0.tar.bz2
cd pygtk-2.24.0
export PKG_CONFIG_PATH=/home/PATH/TO/VIRT/lib/pkgconfig
./configure --prefix=/home/PATH/TO/VIRT/
make
make install
et ça devrait le faire. Il suffit de remplacer PATH/TO/VIRT/ par votre propre path. Je suis sûr que quelqu'un pourrait aider à ajouter le chemin à virtualenvwrapper?
j'ai fait cela
sudo apt-get install python-gtk2
j'ai trouvé qu'il était déjà installé à quelques investigations, j'ai découvert que lorsque je créer un environnement virtuel, il manquait quelques liens je suis donc venu sur ce post: Virtualenv sur Ubuntu sans site-packages .
Je l'ai lu et j'ai adapté les commandes fournies à mon installation comme suit:
-
D'abord je me suis transformé en virtualenv et je l'ai activé par
source bin/activate
-
puis j'ai changé en lib/python2.7 folder inside my virtualenv:
cd lib/python2.7
-
j'ai alors exécuté les commandes suivantes.
$ ln -s /usr/lib/python2.7/dist-packages/cairo/ $ ln -s /usr/lib/python2.7/dist-packages/pygtk.py $ ln -s /usr/lib/python2.7/dist-packages/pygtk.pth $ ln -s /usr/lib/python2.7/dist-packages/gtk-2.0/
-
enfin, pour vérifier, j'ai tapé 'python', et exécuté:
>>> import pygtk
il ne m'a donné aucune erreur, et donc je savais son maintenant disponible dans mon env virtuel.
J'utilise Ubuntu 14.04 (64 bits) sur un Intel Core i5.
pygtk
ne peut pas être installé dans votre virtualenv à partir de PyPI ,donc
pip install pygtk
va télécharger mais pas installer. Vous pouvez télécharger les fichiers tar et les compiler et les installer, mais s'il est correct d'établir des liens vers les paquets pertinents installés dans le système, alors activer votre virtualenv et installer ruamel.venvgtk
est suffisant:
pip install ruamel.venvgtk
c'est un bouchon sans vergogne pour mon propre travail, aucune des autres solutions ici ne fonctionnait bien avec la création répétée de virtualenv comme est par exemple fait par tox
.
dans le setup.py
des colis, il se produit ce qui suit:
try:
import gtk
except ImportError:
print('--------------')
import subprocess
instdir = subprocess.check_output([
'/usr/bin/python',
'-c',
'import os, pygtk; print os.path.dirname(pygtk.__file__)',
]).strip()
for dst_base in sys.path:
if dst_base.strip():
break
for d in [
'pygtk.pth',
'pygtk.py',
'gtk-2.0',
'gobject',
'glib',
'cairo',
]:
src = os.path.join(instdir, d)
dst = os.path.join(dst_base, d)
if os.path.exists(src) and not os.path.exists(dst):
print('linking', d, 'to', dst_base)
os.symlink(src, dst)
I. e python du système est demandé où pygtk est installé (sur Linux Mint 17.1 c'est /usr/lib/python2.7/dist-packages
), puis les liens sont configurés pour le premier chemin (c'est-à-dire non-longueur zéro) pour le python activé.
mon expérience (sur les systèmes Posix exclusivement) a été que certains paquets ne peuvent pas être installés dans virtualenv
(je pense que c'est parce qu'ils ont besoin de se compiler, etc). Parfois, ils peuvent être installés dans l'emballage individuel par la suite.
une façon de gérer cette situation est de compiler et d'installer le paquet ailleurs, puis de configurer virtualenv pour charger ce paquet en ajoutant des chemins site-paquets. Regardez le documentation pour plus. (ou configurer un script boostrap qui change le chemin d'environnement à chaque fois que vous activez votre environnement (facile à faire avec virtualenvwrapper
j'ai le même problème, mais je l'ai corrigé en installant le paquet debian python-gtk2""