web-dev-qa-db-fra.com

Installer PyGtk dans virtualenv

J'essaie donc 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, lorsque je lance ceci, j'obtiens:

ImportError: le backend Gtk * nécessite l'installation de pygtk.

Et maintenant, le plaisir commence. J'ai essayé d'installer pygtk par pip mais ça 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. Toutefois. Je ne sais pas trop comment faire cela dans virtualenv. Où dois-je décompresser les sources de pygtk afin d'être installé dans virtualenv.

37
George Eracleous

L'astuce consiste à définir manuellement les chemins d'accès corrects, puis à exécuter configure dans virtualenv. C'est assez basique, mais ça a fonctionné 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 le Caire 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

Installer 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 cela 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?

18
salomonvh

J'ai fait ça

Sudo apt-get install python-gtk2

J'ai trouvé qu'il était déjà installé après une enquête, j'ai découvert que lorsque je crée un environnement virtuel, il manquait des liens, alors je suis tombé sur ce message: Virtualenv sur Ubuntu sans site-packages .

Je l'ai lu et adapté les commandes fournies à ma configuration comme suit:

  1. J'ai d'abord changé mon virtualenv et l'ai activé par

    source bin/activate
    
  2. Ensuite, j'ai changé dans le dossier lib/python2.7 à l'intérieur de mon virtualenv:

    cd lib/python2.7
    
  3. J'ai ensuite 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/
    
  4. Enfin, pour vérifier, j'ai tapé 'python' et exécuté:

    >>> import pygtk
    

    Cela ne m'a donné aucune erreur, et donc je savais que c'était maintenant disponible dans mon environnement virtuel.

J'utilise Ubuntu 14.04 (64 bits) sur un Core i5 d'Intel.

10
Lenny Linus

pygtk ne peut pas être installé dans votre virtualenv depuis PyPI, donc

pip install pygtk

va télécharger mais pas installer. Vous pouvez passer par les cercles de téléchargement des fichiers tar et de compilation et d'installation de ceux-ci, mais s'il est OK de faire des liens vers les packages appropriés installés dans le système, puis en activant votre virtualenv et en installant ruamel.venvgtk suffit:

pip install ruamel.venvgtk

Ceci est une prise sans vergogne pour mon propre travail, aucune des autres solutions ici n'a bien fonctionné avec la création répétée de virtualenv comme c'est le cas par exemple. fait par tox.

Dans le setup.py des packages, les événements suivants se produisent:

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)

c'est-à-dire que le système python est demandé où pygtk est installé (sur Linux Mint 17.1 c'est /usr/lib/python2.7/dist-packages), puis des liens sont établis vers le premier chemin (c'est-à-dire de longueur non nulle) pour le python activé.

7
Anthon

D'après mon expérience (exclusivement sur les systèmes Posix), certains packages ne peuvent pas être installés dans virtualenv (je pense que c'est parce qu'ils doivent se compiler, etc.). Parfois, ils peuvent être installés dans le package individuel par la suite.

Vous pouvez gérer cette situation en compilant et en installant le package ailleurs, puis en configurant virtualenv pour charger ce package en ajoutant des chemins de packages de site. Consultez la documentation pour en savoir plus. (ou configurez un script boostrap qui change le chemin de l'environnement à chaque fois que vous activez votre environnement (facile à faire avec virtualenvwrapper

0
Jeff Tratner

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

0