Вопрос по pygtk, python, virtualenv – Пакет Python установлен глобально, но не в virtualenv (PyGTK)

4

У меня возникли странные проблемы с PyGTK в "virtualenv», gtk не импортирует в моем virtualenv, а импортирует в моей глобальной установке python. (Я не былЭта проблема возникла на прошлой неделе, потому что какое-то обновление программного обеспечения что-то расстроило.)

Есть ли хороший способ решить эту проблему?

Здесь показано: глобальный импорт gtk,

[email protected]:~$ python
Python 2.7.1+ (r271:86832, Sep 27 2012, 21:12:17) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gtk
>>> gtk

а затем не удается импортировать GTK,

[email protected]:~$ workon py27
(py27)[email protected]:~$ python
Python 2.7.1+ (r271:86832, Sep 27 2012, 21:12:17) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gtk
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named gtk

К сожалению, это нарушило мою среду ipython --pylab:http://pastebin.com/mM0ur7Hc

ОБНОВЛЕНИЕ: я смог исправить это, добавив символические ссылки, как это было предложено grepic / this thread:Python: virtualenv - gtk-2.0

с незначительным отличием, а именно, что мой "Каир" пакет был расположен в/usr/lib/pymodules/python2.7/cairo/ а не в./usr/lib/python2.7/dist-packages/cairo

ВТОРОЕ ОБНОВЛЕНИЕ: я также счел полезным добавить следующие строки в мой:venv/bin/activate

export PYTHONPATH=$PYTHONPATH:/home/tom/.virtualenvs/py27/lib/python2.7/dist-packages
export PYTHONPATH=$PYTHONPATH:/home/tom/.virtualenvs/py27/lib/python2.7/dist-packages/gtk-2.0
export PYTHONPATH=$PYTHONPATH:/usr/lib/pymodules/python2.7/gtk-2.0

(Я подозреваю, что один или несколько из них не нужны, но яслишком долго возился с этим и решил прекратить расследование - моя установка теперь работает, и поэтому я 'Я доволен.)

Задача решена! Спасибо всем.

pastebin.com/eWiVmUXf Похоже, что GTK не в пути venv, что ... вероятно, проблема. tomr_stargazer
Какие'с выводомsys.path в глобальном и венв? iMom0

Ваш Ответ

5   ответов
2

айта-пакеты dir

например

(в )/lib/python2.7/site-packages/dist-packages.pth

/usr/lib/python2.7/dist-packages/

Это устранило проблему, с которой я столкнулся при установке apt-get версии pycairo

Хорошо, если я когда-нибудь столкнусь с этим вопросом, яобязательно попробую это (: tomr_stargazer
4

gtk обычно живет в таком месте, как /usr/lib/python2.7/dist-packages, которое находится на вашем пути Python в вашей глобальной среде, но не в вашей виртуальной среде.

Вы можете просто добавить путь к gtk вручную, например

import sys
sys.path.append("/usr/lib/python2.7/dist-packages/gtk")

Вы также можете изменить путь при активации виртуальной среды. Откройте Venv / bin / активировать. Это страшно выглядящий файл, но в конце вы можете просто положить:

export PATH=$PATH:/my/custom/path

Сохраните это, и в следующий раз вы активируете виртуальную среду с помощью:

source venv/bin/activate

Ваш пользовательский путь будет в пути. Вы можете проверить это с

echo $PATH

Предложен альтернативный подходPython: virtualenv - gtk-2.0 это зайти в свой каталог virtualenv и добавить 'Расс-пакеты каталог и создайте символические ссылки на пакет gtk, который вы использовали ранее:

mkdir -p venv/lib/python2.7/dist-packages/
cd venv/lib/python2.7/dist-packages/

Для GTK2:

ln -s /usr/lib/python2.7/dist-packages/glib/ glib
ln -s /usr/lib/python2.7/dist-packages/gobject/ gobject
ln -s /usr/lib/python2.7/dist-packages/gtk-2.0* gtk-2.0
ln -s /usr/lib/python2.7/dist-packages/pygtk.pth pygtk.pth
ln -s /usr/lib/python2.7/dist-packages/cairo cairo

Для GTK3:

ln -s /usr/lib/python2.7/dist-packages/gi gi

Полное раскрытие: я чувствую, что оба эти решения несколько хакерские, и это нормально, учитывая, что вы говорите, что вопрос срочный. Вероятно, естьсобственно» способ расширения виртуальной среды, поэтому дайте нам знать, если вы в конечном итоге найдете лучшее решение. Вам может повезти сhttp://www.virtualenv.org/en/latest/index.html#creating-your-own-bootstrap-scripts

Обновил ответ выше. dgh
ОК, это все очень полезно! Я обнаружил, что в Python все, что мне нужно сделать, чтобы заставить GTK работать правильно, это следующие строки:import sys  sys.path.append('/usr/lib/pymodules/python2.7/gtk-2.0/')  sys.path.append('/usr/lib/pymodules/python2.7/')  import gtk >>> gtk   Но когда я вставляю эти два пути вvenv/bin/activate файл оболочки, как предложено выше, "echo $ PATH " дает мне ожидаемый результат, но в Python sys.path не содержит новых мест. tomr_stargazer
ОК, похоже, это правильное направление. Если бы я мог задать тупой вопрос, как я могу убедиться, что эти новые символические ссылки есть в моем venv-python?путь при запуске? tomr_stargazer
2

Теперь это можно решить с помощьюVext, Vext позволяет вам устанавливать пакеты в virtualenv, которые имеют индивидуальный доступ к вашим системным пакетам. Чтобы получить доступ к PyGTK, сделайте следующее:

pip install vext
pip install vext.pygtk
2

k-2.0 в virtualenv, вы можете просто использовать pip для установкиruamel.venvgtk:

pip install ruamel.venvgtk

Ты неНе нужно ничего импортировать, ссылки устанавливаются во время установки.

Это особенно удобно, если вы используетеtoxв этом случае вам нужно только включить зависимость (для токса):

deps:
    pytest
    ruamel.venvgtk

и во вновь настроенной среде python2.7 будут включены соответствующие ссылки перед запуском тестов.

12

'

Я подумаю попробовать это в следующий раз, спасибо за совет. Как это, этот конкретный virtualenv уже сильно настроен с тоннами дополнительных пакетов, и я неЯ не хочу начинать с нуля. tomr_stargazer
У меня была та же проблема, и это решение сработало. Я воссоздал virtualenv с этим флагом. Luis Lezcano Airaldi

Похожие вопросы