Установка PyGtk в virtualenv - PullRequest
36 голосов
/ 30 января 2012

Итак, я пытаюсь запустить простой пример matplotlib в моем virtualenv (в консоли).Вот код:

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()

Однако, когда я запускаю это, я получаю:

ImportError: Gtk * backend требует установки pygtk.

А теперь начинается самое интересное.Я попытался pip установить pygtk, но он выдает:

********************************************************************
* 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:
********************************************************************

Я проверил файл INSTALL и говорит попробовать ./configfure; make; make install.Тем не мение.Я не совсем уверен, как это сделать в рамках virtualenv.Где я могу распаковать исходники для pygtk, чтобы установить их в virtualenv.

Ответы [ 5 ]

16 голосов
/ 15 июня 2013

Хитрость заключается в том, чтобы вручную установить правильные пути, а затем запустить configure внутри virtualenv.Это довольно простой, но он работал для меня.

Установите python-config в виртуальном окружении и свяжите его с python2.7-config:

pip install config
ln -s /home/PATH/TO/VIRT/bin/python-config /home/PATH/TO/VIRT/bin/python2.7-config

Установите cairo в виртуальном окружении:

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

Установите 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

И это должно сделать это.Просто замените PATH / TO / VIRT / своим собственным путем.Я уверен, что кто-то может помочь в добавлении пути к virtualenvwrapper?

10 голосов
/ 21 февраля 2016

Я сделал это

sudo apt-get install python-gtk2

Я обнаружил, что он уже был установлен после какого-то расследования, я обнаружил, что когда я создавал виртуальную среду, в нем отсутствовали некоторые ссылки, поэтому я наткнулся на этот пост: Virtualenv в Ubuntu без пакетов сайтов .

Я прочитал его и настроил команды, предоставленные для моей установки, следующим образом:

  1. Сначала я изменил свой virtualenv и активировал его с помощью

    source bin/activate
    
  2. Затем я перешел в папку lib / python2.7 внутри моего virtualenv:

    cd lib/python2.7
    
  3. Затем я выполнил следующие команды.

    $ 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. Наконец, чтобы проверить, я набрал 'python' и выполнил:

    >>> import pygtk
    

    Он не дал мне ошибки, и поэтому я знал, что теперь он доступен в моем виртуальном окружении.

Я использую Ubuntu 14.04 (64-разрядная версия) на Intel Core i5.

7 голосов
/ 14 декабря 2014

pygtk не может быть установлен в вашем virtualenv из PyPI, поэтому

pip install pygtk

будет загружаться, но не устанавливаться. Вы можете пройти через циклы загрузки файлов tar, компилировать и устанавливать их, но если все в порядке, чтобы делать ссылки на соответствующие пакеты, установленные в системе, тогда достаточно активировать вашу virtualenv и установить ruamel.venvgtk :

pip install ruamel.venvgtk

Это бесстыдная заглушка для моей собственной работы, ни одно из других решений здесь не сработало с повторным созданием virtualenv, как, например, сделано tox.

В setup.py пакетов происходит следующее:

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)

то есть системный python спрашивается, где установлен pygtk (в Linux Mint 17.1 это /usr/lib/python2.7/dist-packages), а затем устанавливаются ссылки на первый путь (ненулевой длины) для активированного питона.

0 голосов
/ 11 июня 2014

У меня та же проблема, но я исправил ее, установив пакет debian python-gtk2

0 голосов
/ 09 апреля 2012

Мой опыт (исключительно для систем Posix) заключается в том, что некоторые пакеты не могут быть установлены в virtualenv (я думаю, это потому, что им нужно самостоятельно скомпилировать и т. Д.).Иногда они могут быть установлены в отдельном пакете впоследствии.

Один из способов справиться с этой ситуацией - это скомпилировать и установить пакет где-нибудь еще, а затем настроить virtualenv для загрузки этого пакета, добавив пути к пакетам сайта.Проверьте документацию для получения дополнительной информации.(или настройте скрипт Boostrap, который меняет путь к среде каждый раз, когда вы активируете свою среду (легко сделать с помощью virtualenvwrapper

...