Вопрос

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

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

Это было полезно?

Решение

$ 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

Другие советы

Один из способов - добавить пути к вашему коду с помощью 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/

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

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

То же самое для чего-то вроде AppEngine.

Посмотрите скрипт-ловушку postmkvirtualenv здесь:

https://stackoverflow.com/a/9716100/60247

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

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

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

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

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

deps:
    pytest
    ruamel.venvgtk

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top