Как установить python3-gi в virtualenv?
Я следую Python GTK + 3 Tutorial, и я пытаюсь заставить рабочую установку работать в virtualenv. Я уже python3-gi установлен через диспетчер пакетов Ubuntu. Все выглядит так:
:~$ mkvirtualenv py3 --python=/usr/bin/python3
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in py3/bin/python3
Also creating executable in py3/bin/python
Installing setuptools, pip...python
done.
(py3):~$ python
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import gi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'gi'
>>>
(py3):~$ deactivate
:~$ /usr/bin/python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import gi
>>>
Как вы можете видеть, python3-gi, очевидно, недоступен в virtualenv, но я не уверен, как его установить, поскольку python3-gi устанавливается через диспетчер пакетов, а не с помощью pip.
Ответы
Ответ 1
Теперь это можно решить, используя vext. Vext позволяет устанавливать пакеты в virtualenv, которые индивидуально получают доступ к вашим системным пакетам. Чтобы получить доступ к gi
, выполните следующие действия:
pip install vext
pip install vext.gi
Ответ 2
Я не нашел правильного решения. Когда я сталкиваюсь с ситуациями, когда я не могу получить что-то, что нужно установить в virtualenv напрямую, я символически свяжу его там, и он отлично работает (возможно, есть исключения, но это не один из них).
ln -s /usr/lib/python3/dist-packages/gi /path_to_venv/lib/python3.4/site-packages/
Не элегантно ни малейшего; кажется более приятным, чем предоставление виртуальному файлу полного доступа ко всем системным пакетам (через --system-site-packages
).
Ответ 3
Обновление 2018 - Debian Stretch
-
Установите GTK+ 3/GIR.
apt install libcairo2-dev libgirepository1.0-dev gir1.2-gtk-3.0
-
Создать виртуальную среду.
python3 -mvenv venv
-
Установите pygobject
(pycairo
должен стать зависимым).
venv/bin/pip install pygobject
Обновление 2018 - macOS
-
Установите GTK+ 3 и Gobject Introspection с помощью Homebrew.
brew install gtk+3 gobject-introspection
-
Создайте и активируйте виртуальную среду.
python3 -mvenv venv
-
Установите pygobject
(pycairo
должен стать зависимым).
PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig ARCHFLAGS="-arch x86_64" venv/bin/pip install pygobject
Оригинальный ответ
Это то, что я сделал, чтобы получить GTK+ 3 в виртуальной среде Python 3.5 на OS X 10.11.
-
Установите GTK+ 3 с помощью Homebrew.
brew install gtk+3
-
Создайте и активируйте виртуальную среду.
pyvenv-3.5 venv
source venv/bin/activate
cd venv
-
Установите pycairo в виртуальной среде.
export PKG_CONFIG_PATH=$VIRTUAL_ENV/lib/pkgconfig
curl -L https://cairographics.org/releases/pycairo-1.10.0.tar.bz2 | tar xj
cd pycairo-1.10.0
export ARCHFLAGS='-arch x86_64'
python waf configure --prefix=$VIRTUAL_ENV # It ok, this will fail.
sed -i '' '154s/data={}/return/' .waf3-1.6.4-*/waflib/Build.py # Bugfix: https://bugs.freedesktop.org/show_bug.cgi?id=76759
python waf configure --prefix=$VIRTUAL_ENV # Now it should configure.
python waf build
python waf install
unset ARCHFLAGS
cd ..
-
Установите pygobject в виртуальной среде.
export PKG_CONFIG_PATH=$VIRTUAL_ENV/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig
curl -L http://ftp.gnome.org/pub/GNOME/sources/pygobject/3.12/pygobject-3.12.2.tar.xz | tar xJ
cd pygobject-3.12.2
./configure CFLAGS="-I$VIRTUAL_ENV/include" --prefix=$VIRTUAL_ENV
make
make install
cd ..
-
Прибыль.
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from gi.repository import Gtk, Gdk, Pango, GObject
>>> from cairo import ImageSurface, Context, FORMAT_ARGB32
>>>
Python 3.5 загружен и установлен из PSF.
Ответ 4
Я установил pgi
через pip
, что может быть опцией. Он, по-видимому, API совместим с PyGObject
и пока работает нормально Gtk
.
Ответ 5
Название пакета pip несколько нелогично - используйте pip install PyGObject
.
Ответ 6
В Ubuntu (протестировано в 19.04) вы можете загрузить пакет и установить его следующим образом:
apt-get -y download python3-gi
dpkg-deb -x <package>.deb <virtualenv path>
В Ubuntu загруженный пакет называется python3-gi_3.32.0-1_amd64.deb
.