Virtualenv на Ubuntu без пакетов сайтов

Я использую virtualenv в последнее время, развиваясь в python. Мне нравится идея изолированной среды разработки с использованием опции -no-site-packages, но это при разработке приложения PyGTK может быть немного сложным. Модули PyGTK устанавливаются на Ubuntu по умолчанию, и я хотел бы сделать virtualenv (с --no-site-пакетами) информацией о конкретных модулях, которые находятся в другом месте в системе.

Какой лучший способ сделать это? Или мне просто сосать его и отказаться от опции -no-site-packages?

Ответ 1

$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv
$ cd myvirtualenv
$ source bin/activate
$ cd lib/python2.6/
$ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/ 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.pth 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.py 
$ ln -s /usr/lib/pymodules/python2.6/cairo/
$ python
>>> import pygtk
>>> import gtk

Ответ 2

Один из способов - добавить пути к вашему коду с помощью sys.path.

import sys

sys.path.append(somepath)

Другой способ - использовать сайт, который обрабатывает .pth файлы в дополнение к добавлению в sys.path.

import site

site.addsitedir(sitedir, known_paths=None)

https://docs.python.org/library/site.html

Но вы, вероятно, не хотите добавлять это ко всему вашему связанному коду.

Я видел упоминание файла sitecustomize.py, используемого для выполнения чего-то подобного, но после некоторого тестирования я не мог заставить его работать так, как можно было бы ожидать.

Здесь упоминается, что авто-импорт sitecustomize.py закончился в 2.5, если ваш не на 2.5 попробуйте. (просто добавьте один из методов добавления пути к файлу и поместите его в каталог, в котором запускается ваша программа) Метод работы описан в сообщении для пользователей размером 2.5 и выше.

http://code.activestate.com/recipes/552729/

Ответ 3

В этой ситуации я обнаруживаю, что символические ссылки или даже копирование определенных файлов (пакетов, модулей, расширений) работают очень хорошо.

Это позволяет программе эмулировать запуск в целевой среде, а не изменять приложение в соответствии с средой разработки.

То же самое для AppEngine.

Ответ 4

Посмотрите на postmkvirtualenv hook script здесь:

fooobar.com/questions/93198/...

В этом случае он использует его для импорта PyQt и SIP после создания нового Virtualenv, но вы можете добавить пакеты, которые вам нужны для LIBS.

И проголосуйте за script, потому что это фантастика:)

Ответ 5

Если вы хотите включить ссылки в соответствующую систему python gtk-2.0 в virtualenv, вы можете просто использовать pip для установки ruamel.venvgtk:

pip install ruamel.venvgtk У вас нет импорта ничего, ссылки устанавливаются во время установки.

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

deps:
    pytest
    ruamel.venvgtk

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

Более подробную информацию о настройке ссылок можно найти в этом ответе