Virtualenv на Ubuntu без сайтов-пакетов - PullRequest
24 голосов
/ 30 октября 2008

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

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

Ответы [ 5 ]

34 голосов
/ 04 ноября 2009
$ 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
5 голосов
/ 30 октября 2008

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

1 голос
/ 27 августа 2012

Посмотрите скрипт хука postmkvirtualenv здесь:

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

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

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

1 голос
/ 30 октября 2008

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

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

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

0 голосов
/ 14 декабря 2014

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

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

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

deps:
    pytest
    ruamel.venvgtk

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

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

...