Я начинаю использовать 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, но я хотел бы услышать, почему это будет лучше, чем моя идея с символическими ссылками.