2014-10-31 8 views
11

Я следую за Python GTK+ 3 Tutorial, и я пытаюсь запустить рабочую установку в virtualenv. У меня уже установлен python3-gi через менеджер пакетов Ubuntu. Вещи выглядеть следующим образом:Как установить python3-gi в virtualenv?

:~$ 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-г, очевидно, не доступны в virtualenv, но я не уверен, как установить его так python3-г устанавливаются через мой менеджер пакетов, а не с пипом.

+1

При создании виртуальной среды добавьте флаг '--system-Site-packages' – CasualDemon

ответ

9

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

pip install vext 
pip install vext.gi 
10

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

ln -s /usr/lib/python3/dist-packages/gi /path_to_venv/lib/python3.4/site-packages/ 

Не элегантно ни в малейшей степени; кажется более приятным, чем предоставление virtualenv полного доступа ко всем системным пакетам, хотя (через --system-site-packages).

3

Я установил pgi через pip, что может быть одним из вариантов. Очевидно, что API совместим с PyGObject, и до сих пор, похоже, работает нормально Gtk.

4

Это то, что я сделал, чтобы получить GTK + 3 в виртуальной среде Python 3.5 на OS X 10.11.

  1. Установить GTK + 3 с Homebrew.

    brew install gtk+3 
    
  2. Создание и активация виртуальной среды.

    pyvenv-3.5 venv 
    source venv/bin/activate 
    cd venv 
    
  3. Установка 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's 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 .. 
    
  4. Установка 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 .. 
    
  5. Прибыль.

    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.

+0

Спасибо за этот Рафа, собирается попробовать это сегодня на самом деле. –

+0

Просто попробовал этот Рафа, и это сработало очень хорошо для меня, одна опечатка, которую я видел. sed -i '' '154s/data = {}/return /' .waf3-1.6.4 - */waflib/Build.py должно быть sed -i '154s/data = {}/return /' .waf3-1.6 .4 - */waflib/Build.py Все остальное получилось отлично, спасибо! –

+1

Эй, Малком, это не опечатка.Опция '-i' с пустой строкой сообщает стандарт' sed', который поставляется с OS X, для выполнения встроенной замены в файле без создания резервной копии. Может быть, вы используете GNU-реализацию 'sed' вместо этого? – Rafa

Смежные вопросы