LINUX.ORG.RU

Как упаковывают Python-приложения в AppImage?

 , , , ,


0

3

Хочу упаковать в AppImage приложение на Python, использующее PyQt5. Думал, что должно быть просто, но не осилил. Само приложение: FlatCAM Beta.

Смотрю варианты: PyAppImage не поддерживает приложения на Qt, python-appimage может упаковать только приложения, устанавливаемые напрямую через pip. Вроде бы pkg2appimage может упаковать что угодно, смотрю пример.

Делаю примерно как в примере:

app: org.flatcam.FlatCAM

ingredients:
  dist: jammy
  sources: 
    - deb http://us.archive.ubuntu.com/ubuntu/ jammy jammy-updates jammy-security main universe
    - deb http://us.archive.ubuntu.com/ubuntu/ jammy-updates main universe
    - deb http://us.archive.ubuntu.com/ubuntu/ jammy-security main universe
  packages:
    - git
    - libfreetype6
    - libfreetype6-dev
    - libgeos-dev
    - libpng-dev
    - libspatialindex-dev
    - qt5-style-plugins
    - python3.10-dev
    - python3.10-gdal
    - python3.10-pip
    - python3.10-pyqt5
    - python3.10-pyqt5.qtopengl
    - python3.10-simplejson
    - python3.10-tk

script:
  - git clone -b Beta https://bitbucket.org/jpcgt/flatcam.git
  - virtualenv usr
  - sed -i 's/numpy>=1.16/numpy==1.21.6/' flatcam/requirements.txt
  - sed -i 's/vispy$/vispy==0.7/' flatcam/requirements.txt
  - sed -i 's/gdal$/gdal==3.4.1/' flatcam/requirements.txt
  - ./usr/bin/pip3 install -r flatcam/requirements.txt
  - mv flatcam/assets/linux/icon.png ./usr/share/icons/hicolor/256x256/flatcam.png
  - sed -i 's|script_path=.*$|script_path=../flatcam|' flatcam/assets/linux/flatcam-beta
  - mv flatcam/assets/linux/flatcam-beta ./usr/bin/
  - sed -i 's|\./assets/icon.png|flatcam|' flatcam/assets/linux/flatcam-beta.desktop
  - sed -i 's|\./bin/||' flatcam/assets/linux/flatcam-beta.desktop
  - sed -i '5i Categories=Science' flatcam/assets/linux/flatcam-beta.desktop
  - mv flatcam/assets/linux/flatcam-beta.desktop ./usr/share/applications/org.flatcam.FlatCAM.desktop
  - cp ./usr/share/icons/hicolor/256x256/flatcam.png .
  - cp ./usr/share/applications/org.flatcam.FlatCAM.desktop .

И всё вроде бы собирается, но при запуске не находится модуль PyQt5, хоть он и упаковался. Может, нужно как-то хитро запускать, подсовывая питону правильный путь, где модули искать?

★★★★★

Наверное переменные окружения надо подровнять

Тут (в самом низу)

другой упаковщик, но смысл тот-же, можешь распаковать свой собранный appimage, вручную вписать переменные окружения питона в стартовый стандартный скрипт и запаковать обратно. Ну или как там в pkg2appimage перменные окружения задаются посмотреть.

Сам я не пробовал, ни то ни это, просто мысли в слух. Но раз там требуется пути задавать, вероятно и у тебя тоже.

LINUX-ORG-RU ★★★★★
()

Какая именно ошибка выводится?

Я бы сказал, что такой метод установки, когда часть зависимостей устанавливается как deb пакеты, а часть - через requirements.txt - это просто хождение по граблям. Требуется либо одно, либо другое, смешивать эти подходы нельзя (как минимум, не будучи экспертом в Python).

Chiffchaff
()
Ответ на: комментарий от Chiffchaff

Ошибка:

Traceback (most recent call last):
  File "/tmp/.mount_FlatCAdCRjj3/usr/../flatcam/FlatCAM.py", line 4, in <module>
    from PyQt5 import QtWidgets
ModuleNotFoundError: No module named 'PyQt5'

Метод установки скопировал из скрипта setup_ubuntu.sh.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

И там всё-таки отличается. В оригинальном посте создаётся virtualenv usr. Как ведёт себя virtualenv при таком использовании, я не знаю.

Для начала я бы предложил попробовать опцию virtualenv --system-site-packages. Если не сработает, использовать virtualenv в другом месте с той же самой опцией. Если и это не сработает, то все зависимости устанавливать в virtualenv.

Chiffchaff
()
Ответ на: комментарий от CYB3R

Взял и выложил, как будет время и желание, может кому пригодится, можно ещё issue самим pkg2appimage написать с рецептом, мол у меня с вашей утилитой возникла вот такая проблема, а решил я её вот так вот, может они это в свою документацию утянут, дополнят уточнения или даже допилят сами.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)