Как установить модуль python gi в виртуальной среде?

Я просмотрел это и попытался следующий код:

ln -s /usr/lib/python2.7/dist-packages/pygtk.pth tools/pythonimport glib7_9/lib/python2.7/site-packages/
ln -s /usr/lib/python2.7/dist-packages/gobject tools/pythonimport glib7_9/lib/python2.7/site-packages/
ln -s /usr/lib/python2.7/dist-packages/gtk-2.0 tools/pythonimport glib7_9/lib/python2.7/site-packages/
ln -s /usr/lib/python2.7/dist-packages/pygtk.pth tools/pythonimport glib7_9/lib/python2.7/site-packages/
ln -s /usr/lib/python2.7/dist-packages/glib tools/pythonimport glib7_9/lib/python2.7/site-packages/
ln -s /usr/lib/python2.7/dist-packages/gi tools/pythonimport glib7_9/lib/python2.7/site-packages/
ln -s /usr/lib/python2.7/dist-packages/pygtkcompat tools/pythonimport glib7_9/lib/python2.7/site-packages/

, но import glib или import gi по-прежнему выдает ошибки:

yba@ubuntu:~/Documents/XXX/tools$ source python_2import gi9/bin/activate
(python_2import gi9) yba@ubuntu:~/Documents/XXX/tools$ python
Python 2.7.9 (default, Aug 29 2016, 16:04:36) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import glib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/yba/Documents/XXX/tools/python_2import gi9/lib/python2.7/dist-packages/glib/__init__.py", line 22, in <module>
    from glib._glib import *
ImportError: /home/yba/Documents/XXX/tools/python_2import gi9/lib/python2.7/dist-packages/glib/_glib.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8
>>> import gi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/yba/Documents/XXX/tools/python_2import gi9/lib/python2.7/dist-packages/gi/__init__.py", line 36, in <module>
    from ._gi import _gobject
ImportError: /home/yba/Documents/lucida/tools/python_2import gi9/lib/python2.7/dist-packages/gi/_gi.so: undefined symbol: PyUnicodeUCS4_FromUnicode
>>> 

Как и в этом посте, общесистемный python работает нормально:

yba@ubuntu:~$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gi
>>> import glib
>>> 

Как решить эту проблему? Кроме того, мне действительно нужно import gi.repository, а не import gi. Большое спасибо!


person Yunsheng Bai    schedule 29.08.2016    source источник


Ответы (3)


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

pip install vext
pip install vext.gi
person lofidevops    schedule 06.05.2017
comment
это просто дает мне длинную строку сообщений об ошибках, а затем сбой :( - person Erik Aronesty; 16.10.2017
comment
@ErikAronesty Я больше не нахожусь в той же системе, поэтому не могу перепроверить — возможно, опубликую проблему github .com/stuaxo/vext/issues, и если я пропустил какой-то шаг или что-то вроде явного указания на установку самого gi, пожалуйста, не стесняйтесь редактировать - person lofidevops; 17.10.2017
comment
Это сработало для меня. Если вам не нужен vext, просто создайте виртуальную среду с параметром --system-site-packages. Или для pipenv: 'pipenv --python 3.6 --site-packages'. - person roeland; 01.12.2017

Вам необходимо установить необходимые модули в вашей виртуальной среде.

После активации вам необходимо pip install <library name>. В вашем случае это должно быть pip install gi

person Daniel Kravetz Malabud    schedule 29.08.2016
comment
(python_2_7_9) yba@ubuntu:~/Documents/XXX/tools$ pip install glib Сбор glib Не удалось найти версию, удовлетворяющую требованиям glib (из версий: ) Для glib не найдено подходящего дистрибутива - person Yunsheng Bai; 30.08.2016
comment
Так ты уверен, что это pip install glib? Спасибо! - person Yunsheng Bai; 30.08.2016
comment
Похоже, библиотека называется gi, я соответственно отредактировал ответ. Если это работает, пожалуйста, отметьте это как правильный ответ. - person Daniel Kravetz Malabud; 30.08.2016
comment
Частично это работает, потому что это все еще не работает: from gi.repository import GObject. ››› import gi ››› from gi.repository import GObject Traceback (последний последний вызов): файл ‹stdin›, строка 1, в ‹module› ImportError: нет модуля с именем репозитория` - person Yunsheng Bai; 30.08.2016
comment
По сути, это дает мне только gi, а не gi.repository. Вы знаете, как установить gi.repository? Большое спасибо! - person Yunsheng Bai; 30.08.2016

Прежде всего, имейте в виду, что Python, используемый виртуальной средой (2.7.9), это не то же самое, что общесистемный Python (2.7.6), поэтому я не вижу смысла сравнивать их. .

Одна вещь, которую вы можете сделать, это создать виртуальную среду с нуля, используя флаг -p, чтобы указать, какую версию Python следует использовать. Как это:

virtualenv -p /usr/bin/python2.7 <virtualenv/new/path/>

Во-вторых, ошибка undefined symbol: PyUnicodeUCS4_FromUnicode, о которой вы сообщаете в версии 2.7.9, может быть связана с неправильной компиляцией исходных кодов Python. Попробуйте скомпилировать их еще раз, но обратите внимание на опцию --enable-unicode=ucs4 в строке ./configure:

$> tar -xf Python-2.7.6.tar
$> cd Python-2.7.6
$> ./configure --prefix=/usr/local --enable-shared --enable-unicode=ucs4
$> make && make altinstall
person Fernando Martin    schedule 18.11.2016