Fabric под Virtualenv: как получить системный путь к библиотеке Python (а не путь к библиотеке virtualenv Python)

Я начинаю использовать Fabric как простой инструмент развертывания для проекта Python, но есть задача, которая должна знать, где находится путь к системной библиотеке Python, чтобы правильно настроить символические ссылки некоторых пакетов.

Итак, вопрос: как в моем fabfile я могу получить системный путь Python? Например, этот код Python возвращает правильный путь к библиотеке:

# Without virtualenv activated
>>> from distutils.sysconfig import get_python_lib;
>>> print get_python_lib()
'/usr/lib/python2.7/dist-packages'

# With virtualenv activated
>>> from distutils.sysconfig import get_python_lib;
>>> print get_python_lib()
'/home/mandx/dev/my_project/env/lib/python2.7/site-packages'

В моем случае мне нужно знать и то, и другое при запуске задачи в Fabric (и с активным virtualenv).

Я объясню свою потребность в этом: я хочу использовать WeasyPrint для создания PDF-файлов, просто передавая содержимое HTML и CSS в конструктор и вызов метода рендеринга. Эта гибкость хороша тем, что теперь дизайнер со знанием CSS может использовать макет PDF, а WeasyPrint стремится к совместимости с CSS3.

И компромисс в том, что это зависит от некоторых библиотек, которые нельзя установить с помощью Pip (в частности, Pango, GdkPixbuf и Cairo). Итак, решение, которое у меня есть на данный момент, состоит в том, чтобы установить их для всей системы и символически связать их с virtualenv проекта.

Мне не очень нравится идея использования опции --system-site-packages в virtualenv, но я хотел бы услышать, почему это будет лучше, чем моя идея с символическими ссылками.


person Armando Pérez Marqués    schedule 27.02.2013    source источник


Ответы (1)


Просто запустите командную задачу сценария оболочки ткани, чтобы запросить python ОС:

/usr/bin/python -c 'from distutils.sysconfig import get_python_lib;print get_python_lib()'
person Peter Lyons    schedule 27.02.2013