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.

37
demandé sur jcollado 2012-01-30 17:01:52

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?

15
répondu salomonvh 2018-01-24 04:15:12

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:

  1. D'abord je me suis transformé en virtualenv et je l'ai activé par

    source bin/activate
    
  2. puis j'ai changé en lib/python2.7 folder inside my virtualenv:

    cd lib/python2.7
    
  3. 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/
    
  4. 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.

9
répondu Lenny Linus 2017-05-23 11:54:26

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é.

6
répondu Anthon 2017-10-11 16:52:32

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

0
répondu Jeff Tratner 2012-04-09 04:19:10

j'ai le même problème, mais je l'ai corrigé en installant le paquet debian python-gtk2""

0
répondu Wael Ben Zid El Guebsi 2014-06-11 19:23:56