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 будет иметь соответствующие ссылки, включенные до запуска тестов.
Более подробную информацию о настройке ссылок можно найти в этом ответе