Python py2app и ошибка подушки: заголовок Mach-O слишком велик - PullRequest
0 голосов
/ 14 июня 2019

Я не могу использовать py2app для создания приложения на python, которое содержит пакет подушек.Я использую:

  • Mac OSX El Capitan (10.11.16)
  • Python 3.7.3 (устанавливается через Homebrew)
  • Подушка 6.0.0
  • py2app 0.19
  • macholib 1.11

Скрипт отлично работает при вызове из командной строки, а пакет py2app отлично работает при компиляции в режиме псевдонима python3 setup.py py2app -A

Но, когда я пытаюсь скомпилировать автономный пакет, используя: python3 setup.py py2app --packages=PIL

, я получаю следующее сообщение об ошибке:

ValueError: New Mach-O header is too large to relocate in '/Users/RG/Library/Mobile Documents/com~apple~CloudDocs/iHal/Code/QuotesApp/dist/Quotes.app/Contents/Resources/lib/python3.7/PIL/.dylibs/liblcms2.2.dylib' (new size=1688, max size=1680, delta=48)

Я искал, но мне не повезлоЕсли вам нужна помощь в решении этой проблемы, возможно, это проблема El Capitan (OSX 10.11.16)?

1 Ответ

0 голосов
/ 16 июля 2019

характеристики моей системы:

  • Mac OSX Mojave (10.14.15)
  • Python 3.7.4 (python.org)
  • Подушка 6.1.0
  • py2app 0.19
  • махолиб 1.11

У меня были те же проблемы, что и у вас. Причина сбоя в том, что библиотека неправильно скомпилирована. Я выяснил два решения. В моей системе библиотека расположена по адресу: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/PIL/.dylibs/

Если вы не используете управление цветом в своем проекте, вы можете удалить библиотеку "liblcms2.2.dylib". Теперь вы можете запустить py2app, и он будет собираться.

Второе решение - больше работы и то, как я использую его в своем проекте. Во-первых, вам нужен Xcode, потому что мы должны перекомпилировать библиотеку "littlecms".

XCode составляет около 6 ГБ, и вы получаете его из Apple Appstore. На моей системе установлена ​​версия 10.2.1.

Скачать библиотеку littlecms в версии 2.2: https://www.littlecms.com/ Вы будете перенаправлены на SourceForge: https://sourceforge.net/projects/lcms/files/lcms/2.2/

Загрузите один из этих файлов: lcms2-2.2.zip или lcms2-2.2.tar.gz и распакуйте его в своей системе. Исходный код библиотеки поставляется с файлом проекта Xcode, который вы найдете в Projects / mac. Если вы знакомы с терминалом, вы можете создать его без графического интерфейса Xcode. В этом случае перейдите в извлеченную папку littlecms и введите следующие команды.

  • . / Configure
  • сделать
  • сделать проверку

Если последняя команда (make check) работает нормально, библиотека готова к развертыванию. Вы найдете скомпилированную библиотеку в папке: src / .libs /. Замените библиотеку, которая входит в пакет PIL, вашей скомпилированной библиотекой. Наконец, запустите py2app, чтобы построить свой проект.

Если это не работает, вы должны указать компоновщику флаг. Перейдите в исходную папку littlecms и введите команды:

  • сделать чистым
  • . / Configure LDFLAGS = "- headerpad_max_install_names"
  • сделать
  • сделать чек

Замените скомпилированную библиотеку на PIL.

так долго,

Phil

...