Проблемы при использовании py2app для замораживания скрипта Python, который использует pdfkit
Недавно я создал приложение с использованием pdfkit, которое берет ключевое слово, введенное пользователем, и выполняет различные интернет-поиски с использованием этого ключевого слова. Затем он использует pdfkit для генерации pdf-файлов каждого отдельного поиска и сохраняет их в пользовательский каталог.
Все работает отлично, когда я запускаю код из терминала, однако, когда я пытаюсь заморозить скрипт с помощью py2app, все работает нормально, пока не доходит до фактического сохранения pdf, при котором приложение абсолютно ничего не делает.
Я попытался включить как pdfkit, так и wkhtmltopdf в файл setup.py, который py2app использует для создания приложения, но, к счастью, я попытался перечислить их в разделе включений следующим образом:
'includes':['requests','pdfkit']
В разделе пакетов:
'packages':['requests','pdfkit']
и даже в разделе setup_requires ниже:
setup_requires=['py2app', 'wkhtmltopdf']
Но приложение все равно ничего не делает. Я предполагаю, что это связано с тем, что зависимость не переносится в замороженное приложение. Однако я начинаю переосмысливать это, так как даже когда я создаю приложение в режиме псевдонима (который утверждает, что сохраняет все зависимости), возникает та же проблема.
Это известная проблема? Или кто-нибудь нашел решение для этого.
Большое спасибо. Мой полный файл setup.py ниже:
from setuptools import setup
APP = ['pdtest.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': False, 'includes':['requests','pdfkit'],'packages':['requests','pdfkit'], 'iconfile':'icon.icns'}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app', 'wkhtmltopdf'],
)
1 ответ
Хорошо, нашел ответ, так что любой, кто сталкивается с той же проблемой, может использовать его.
В основном проблема заключается в том, что pdfkit - это просто оболочка для модуля WKHTMLTOPDF.
Так что в основном все, что происходит, когда вы вызываете PDFKIT, это то, что он просто просит WKHTMLTOPDF выполнить за него работу, однако в моей системе по какой-то причине скрипт смог найти модуль WKHTMLTOPDF, когда он запускался из терминала, но был невозможно при конвертации в апплет с помощью py2app.
Что мне нужно было сделать, это сообщить сценарию, где именно находится WKHTMLTOPDF, но сначала вам нужно узнать эту информацию самостоятельно, просто введите в терминал:
which wkhtmltopdf
и вы должны вернуть путь. Если вы этого не сделаете, то, возможно, вам следует сначала подумать об его установке, что обычно помогает.
Затем вам нужно настроить файл конфигурации для поиска в этом месте модуля wkhtmltopdf, так что просто добавьте это в ваш скрипт pdfkit:
config = pdfkit.configuration(wkhtmltopdf='/usr/local/bin/wkhtmltopdf')
За исключением замены пути после "=" на любой путь, который вернул предыдущая команда. Затем, каждый раз, когда вы вызываете pdfkit, вам нужно добавить эту конфигурацию, например:
normalpdf = pdfkit.from_url('URL, 'test.pdf',configuration = config)
И это должно решить проблему. Надеюсь, поможет!