Джанго с Weasyprint на Azure
У меня есть приложение Django, работающее в Azure через WebApps. Для создания PDF-файлов я использую Weasyprint. Развертывание этого в Azure завершается неудачно из-за:
File ".\myapp\views.py", line 19, in <module>
from weasyprint import HTML
File "D:\home\python364x64\lib\site-packages\weasyprint\__init__.py", line 375, in <module>
from .css import preprocess_stylesheet # noqa
File "D:\home\python364x64\lib\site-packages\weasyprint\css\__init__.py", line 29, in <module>
from . import computed_values
File "D:\home\python364x64\lib\site-packages\weasyprint\css\computed_values.py", line 16, in <module>
from .. import text
File "D:\home\python364x64\lib\site-packages\weasyprint\text.py", line 18, in <module>
import cairocffi as cairo
File "D:\home\python364x64\lib\site-packages\cairocffi\__init__.py", line 41, in <module>
cairo = dlopen(ffi, 'cairo', 'cairo-2')
File "D:\home\python364x64\lib\site-packages\cairocffi\__init__.py", line 38, in dlopen
raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2
Это экземпляр Windows работает. У меня были некоторые проблемы с установкой всех необходимых мне пакетов python - т.е. cairocffi. Но теперь я, наконец, справился с этим, используя расширение python3.6.4 (x64).
У меня установлены следующие пакеты через pip/wheel:
--find-links wheelhouse
cairocffi==0.8.0
CairoSVG==2.1.3
cffi==1.11.5
cssselect2==0.2.1
defusedxml==0.5.0
Django==2.0.3
html5lib==1.0.1
pdfrw==0.4
Pillow==5.0.0
pycparser==2.18
Pyphen==0.9.4
pytz==2018.3
six==1.11.0
tinycss2==0.6.1
WeasyPrint==0.42.2
webencodings==0.5.1
В Интернете я не нашел ничего, касающегося проблем с Каиром на Лазурном. Кто-нибудь может помочь? Спасибо!
ОБНОВЛЕНИЕ Каир сейчас работает, и PDF генерируется. Но шрифты не доступны...
Возможно, у кого-то тоже есть проблема с Каиром. Вот как я получил это работает:
Я скачал пакет gtk + отсюда пакет gtk +
Загрузил zip и распаковал его в D:\home\gtk\
Создал новую папку D:\home\SiteExtensions\gtkExtension\ и добавил applicationHost.xdt со следующим содержимым, чтобы добавить папку bin пакета gtk в переменные PATH:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.applicationHost>
<sites>
<site name="%XDT_SCMSITENAME%" xdt:Locator="Match(name)">
<application path="/gtk" applicationPool="%XDT_APPPOOLNAME%" xdt:Transform="Insert">
<virtualDirectory path="/" physicalPath="%XDT_EXTENSIONPATH%" />
</application>
</site>
</sites>
</system.applicationHost>
<system.webServer>
<runtime xdt:Transform="InsertIfMissing">
<environmentVariables xdt:Transform="InsertIfMissing">
<add name="PATH" value="%PATH%;%HOME%\gtk\bin\;" />
</environmentVariables>
</runtime>
</system.webServer>
</configuration>
Теперь генерация PDF через Weasyprint работает. Но шрифты не загружены... Я просто получаю пустые поля вместо символов.