Проблемы при использовании 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)

И это должно решить проблему. Надеюсь, поможет!

Другие вопросы по тегам