python - Installation de PyGtk dans virtualenv





matplotlib (5)


J'ai le même problème, mais je l'ai résolu en installant le paquet debian python-gtk2

J'essaie donc d'exécuter un simple exemple 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 je cours cela, j'obtiens:

ImportError: Gtk * backend nécessite que pygtk soit installé.

Et maintenant, le plaisir commence. J'ai essayé d'installer pip 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 dit d'essayer ./configfure; make; make install ./configfure; make; make install ./configfure; make; make install . Toutefois. Je ne suis pas sûr de savoir comment faire cela dans virtualenv. Où puis-je déballer les sources pour pygtk afin d'être installé dans virtualenv.




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 le virtualenv pour charger ce paquet en ajoutant des chemins de paquets de site. Consultez la documentation pour plus. (ou configurez un script boostrap qui change le chemin de l'environnement chaque fois que vous activez votre environnement (facile à faire avec virtualenvwrapper




pygtk ne peut pas être installé dans votre virtualenv à partir de PyPI, donc

pip install pygtk

téléchargera mais ne pas installer. Vous pouvez passer par les étapes de téléchargement des fichiers tar et de compilation et d'installation de ceux-ci, mais s'il est correct de faire des liens vers les paquets appropriés installés dans le système, alors activer virtualenv et installer ruamel.venvgtk est suffisant:

pip install ruamel.venvgtk

Ceci est une prise éhontée pour mon propre travail, aucune des autres solutions ici ne fonctionnait bien avec la création de virtualenv répétée comme c'est fait par tox .

Dans le setup.py des paquets, il se passe 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)

Par exemple, on demande au python du système où est installé pygtk (sur Linux Mint 17.1, il s'agit de /usr/lib/python2.7/dist-packages ), puis les liens sont configurés sur le premier chemin (longueur non nulle) pour le python activé.




L'astuce consiste à définir manuellement les chemins corrects, puis à exécuter configure dans virtualenv. C'est assez basique, mais ça a marché pour moi.

Installez python-config dans l'environnement 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

Installez cairo dans l'environnement virtuel:

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

Installez 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. Remplacez simplement PATH / TO / VIRT / par votre propre chemin. Je suis sûr que quelqu'un pourrait aider à ajouter le chemin d'accès à virtualenvwrapper?




Je voudrais jeter un oeil à numpy.meshgrid :

http://docs.scipy.org/doc/numpy-1.6.0/reference/generated/numpy.meshgrid.html

qui vous donnera les valeurs de grille X et Y à chaque position dans un maillage / grille. Ensuite, vous pourriez faire quelque chose comme:

import numpy as np
X,Y = np.meshgrid(xrange(3),xrange(2))
zip(X.ravel(),Y.ravel()) 
#[(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)]

ou

zip(X.ravel(order='F'),Y.ravel(order='F')) 
# [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]




python matplotlib pygtk virtualenv