Установка PyGtk в virtualenv
Итак, я пытаюсь запустить простой пример 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.
И теперь начинается веселье. Я попытался установить 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.
Ответы
Ответ 1
Хитрость заключается в том, чтобы вручную установить правильные пути, а затем запустить configure внутри virtualenv. Это довольно просто, но это сработало для меня.
Установить python-config в виртуальном env и связать его с python2.7-config:
pip install config
ln -s /home/PATH/TO/VIRT/bin/python-config /home/PATH/TO/VIRT/bin/python2.7-config
Установите cairo в виртуальном 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
Установить 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
export PKG_CONFIG_PATH=/home/PATH/TO/VIRT/lib/pkgconfig
./configure --prefix=/home/PATH/TO/VIRT/
make
make install
И это должно сделать это. Просто замените PATH/TO/VIRT/своим собственным путем. Я уверен, что кто-то может помочь добавить путь к virtualenvwrapper?
Ответ 2
Я сделал это
sudo apt-get install python-gtk2
Я обнаружил, что он уже был установлен при каком-то расследовании, я узнал, что когда я создаю виртуальную среду, у меня пропали некоторые ссылки, поэтому я столкнулся с этим сообщением:
Virtualenv на Ubuntu без пакетов сайта.
Я прочитал его и выполнил команды, предоставленные моей настройке, следующим образом:
-
Сначала я перешел в мой virtualenv и активировал его
source bin/activate
-
Затем я перешел в папку lib/python2.7 внутри моего virtualenv:
cd lib/python2.7
-
Затем я выполнил следующие команды.
$ 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/
-
Наконец, чтобы проверить, что я набрал "python" и выполнил:
>>> import pygtk
Это не дало мне никаких ошибок, и поэтому я знал, что он теперь доступен в моем виртуальном env.
Я использую Ubuntu 14.04 (64-разрядный) на Intel Core i5.
Ответ 3
pygtk
не может быть установлен в вашем virtualenv из PyPI, поэтому
pip install pygtk
загрузит, но не установит. Вы можете пройти через обручи загрузки tar файлов и их компиляции и установки, но если в порядке, чтобы сделать ссылки на соответствующие пакеты, установленные в системе, активируйте свой virtualenv и установите ruamel.venvgtk
достаточно:
pip install ruamel.venvgtk
Это бесстыдный плагин для моей собственной работы, ни одно из других решений здесь не сработало хорошо с повторным созданием виртуального виртуального диска, как, например, сделанный 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
), а затем ссылки настроены на первый путь (то есть ненулевую длину) для активированного питона.
Ответ 4
Мой опыт (только в системах Posix) заключался в том, что некоторые пакеты не могут быть установлены в virtualenv
(я думаю, это потому, что они должны скомпилировать себя и т.д.). Иногда они могут быть установлены в отдельном пакете позже.
Одним из способов справиться с этой ситуацией является компиляция и установка пакета в другом месте, а затем настройка virtualenv для загрузки этого пакета путем добавления путей пакетов сайтов. Подробнее см. . (или настройте boostrap script, который изменяет путь к среде каждый раз, когда вы активируете свою среду (легко сделать с virtualenvwrapper
Ответ 5
У меня та же проблема, но я исправил ее, установив пакет debian python-gtk2