Проблемы с компиляцией программного обеспечения GTK в MSYS2 / MinGW с помощью PyInstaller - PullRequest
0 голосов
/ 14 июля 2020

У меня была годовая версия MSYS2 / MinGW, в которой использовался PyInstaller с Python3 .7 для компиляции приложения C GTK в Windows (python требовалось для сценария построения), и все работало нормально пока pacman не отказался обновлять какие-либо пакеты, так как я продолжал получать ошибку:

error: hook /usr/share/libalpm/hooks/mingw-w64-x84_64-gtk-query-immodules-3.0.hook line 2: invalid value Path
error: hook /usr/share/libalpm/hooks/mingw-w64-x84_64-gtk-update-icon-cache.hook line 2: invalid value Path
Errors occurred, no packages were upgraded.

Я просмотрел их и получил общий ответ: «Проблема обычно возникает, когда вы не поддерживаете свою систему на через регулярные интервалы - и я не думаю ежегодно - потому что такое пренебрежение часто приводит к аналогичным проблемам. Проблема возникает из-за изменения кода pacman ... "

Итак, я решил начать с fre sh MSYS2 установил и использовал следующие строки как из оболочки MSYS2, так и из оболочки MinGW-x64, и каждая из них не работает в разных точках:

pacman -Syu
pacman -Su
pacman -S nano
pacman -S mingw-w64-i686-gtk3
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject
pacman -S --needed base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain git subversion mercurial mingw-w64-i686-cmake mingw-w64-x86_64-cmake
pacman -S python3-pip
pacman -S mingw-w64-x86_64-python3-pip
pacman -S msys2-devel
pacman -S mingw-w64-x86_64-glade
pacman -S mingw-w64-x86_64-gobject-introspection
pip install pyinstaller

В случае оболочки MSYS2 pip install pyinstaller не работает с:

# pip install pyinstaller
Collecting pyinstaller
  Using cached PyInstaller-3.6.tar.gz (3.5 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python3.exe /usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpd9hk1ekp
       cwd: /tmp/pip-install-ouq11vnr/pyinstaller
  Complete output (1 lines):
  Your platform is not yet supported. Please define constant PYDYLIB_NAMES for your platform.

Поиск inte rnet показывает, что эта проблема возникает на странице github для PyInstaller и публикации здесь, ни один из которых не был удален ning:

https://github.com/pyinstaller/pyinstaller/issues/4542

Как исправить: PyInstaller в MSYS2 MinGW «Ваша платформа еще не поддерживается»

В случае оболочки MinGW я могу установить все нормально, но я не могу скомпилировать код C, потому что получаю сообщение об ошибке:

fatal error: sys/wait.h: No such file or directory
    7 | #include <sys/wait.h>
      |          ^~~~~~~~~~~~
compilation terminated.

Это означает, что MinGW не знает, где искать для этого файла. Он находится в:

msys64/usr/include/sys

, но я полагаю, что он работает только для оболочки MSYS2? И все же моя годовая оболочка MinGW скомпилирует код C без этой ошибки, но, несмотря на все усилия (следуя истории bash для установки пакетов для рабочей версии, вручную копируя папки пакетов, и так далее), я продолжаю столкнулся с этой ошибкой. Простое копирование папки выше в папку включения MinGW приводит к дальнейшим проблемам и явно небрежно. Мне нужен повторяемый способ заставить это работать, и я повторил описанный выше процесс на нескольких компьютерах и каждый раз получал один и тот же результат - поэтому я ожидаю, что любой, кто начинает с установки fre sh MSYS2, столкнется с такие же проблемы. Любая помощь в запуске этого процесса была бы очень признательна, поскольку меня раздражают все тупики.

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Я наконец смог понять это. Первое, что нужно знать, это то, что первоначальная компиляция должна выполняться в оболочке MSYS2. После того, как вы успешно скомпилируете его в оболочке MSYS2, вы сможете без проблем скомпилировать его в оболочке MINGW. Я не уверен, почему это так, но я ожидал, что так и будет.

Я решил проблему PyInstaller, загрузив Python 3.7 из http://repo.msys2.org/ и установив его, используя:

pacman -U python-3.7.2-1-x86_64.pkg.tar

Мне также понадобилось Python 3.7, установленное в Windows, и путь, отредактированный в моем .bashr c файле:

export PYTHON_HOME=C:\\Users\\Leigh\\AppData\\Local\\Programs\\Python\\Python37
export PATH="$PYTHON_HOME:$PYTHON_HOME\\Scripts:$PATH"

Я не уверен, что PyInstaller пока совместим с Python 3.8. Я разместил проблему на их странице GitHub, и она здесь для справки, если она будет решена:

https://github.com/pyinstaller/pyinstaller/issues/4996

PyInstaller тогда работал, но меня встретили с другой проблемой, которую я опубликовал в Stack Overflow, но тоже выяснил. Вот здесь:

MSYS2 g cc фатальная ошибка в cc1.exe: обнаружено несоответствие базового кода cygheap

После того, как эта проблема была решена, я смог скомпилировать свою программу в MSYS2 . Переключившись на оболочку MINGW, я обнаружил, что теперь она тоже скомпилирована.

0 голосов
/ 14 июля 2020

sys/wait.h отсутствует в MinGW, но вы можете использовать его из: https://github.com/win32ports/sys_wait_h

...