Задать вопрос
BotaniQ_Q
@BotaniQ_Q

Как собрать установочный пакет на Linux для Linux?

Я написал программу на python, она использует сторонние библиотеки, к себе я их ставил через pip, как сделать установочный пакет, что бы юзер скачал по ссылке этот пакет и ему поставился python с нужной версией, сама программа, библиотеки к ней, иконка появилась для проги?
  • Вопрос задан
  • 1586 просмотров
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
0) Желательно все упаковать в virtuelenv, если используете pip. Или использовать стандартные пакеты системы.
1) Создаете каталог для своего пакета, например myservice-0.001
2) Кидаете все свои исходники в этот каталог, пути ставите, как они у вас будут в целевой системе
Например:
etc/systemd/system/myservice.service
opt/myservice/...
opt/.myservice-venv/...
usr/bin/myservice

И т.д.
3) Создаете там же каталог DEBIAN, в него кладете файл control - https://www.debian.org/doc/debian-policy/ch-contro...
, и файл postinst (опционально) - https://www.debian.org/doc/debian-policy/ch-mainta...

В control описываете свои зависимости и название пакета, какие пакеты замещает
postinst - исполняемый, запускается после установки пакета, пользхователей там создать, сервис запустить и т.д.
root@xxx:~/xxx-2.40# cat DEBIAN/control
Package: xxx
Version: 2.40
Section: custom
Priority: optional
Architecture: all
Essential: no
Installed-Size: 171700
Maintainer: xxx.ru
Description: XXX DS system
Depends: samba, isc-dhcp-server, python-twisted, libdate-manip-perl, libio-socket-multicast-perl
Replaces: isc-dhcp-server, samba
Recommends: sudo, vim, nano

и
root@xxx:~/xxx-2.40# cat DEBIAN/postinst
#!/bin/sh
# postinst script for webpy-example
#
# see: dh_installdeb(1)

set -e

# summary of how this script can be called:
#        * <postinst> `configure' <most-recently-configured-version>
#        * <old-postinst> `abort-upgrade' <new version>
#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
#          <new-version>
#        * <postinst> `abort-remove'
#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
#          <failed-install-package> <version> `removing'
#          <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package

# source debconf library
. /usr/share/debconf/confmodule

case "$1" in

  configure)
    adduser --quiet --system --home /inbox  xxx || echo "User xxx existed!"
    usermod -p yyyy xxx
    (echo new123; echo new123) | smbpasswd -as xxx
    smbpasswd -e xxx
    systemctl enable xxx
    systemctl start xxx
  ;;

  abort-upgrade|abort-remove|abort-deconfigure)
    exit 0
  ;;

  *)
    echo "postinst called with unknown argument \`$1'" >&2
    exit 1
  ;;

esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

db_stop
exit 0

4) идете на каталог ниже и выполняете
dpkg-deb --build myservice-0.001
Рядом получаете файло myservice-0.001.deb

Доне.

PS.Про иконки и прочее отдельно читайте, этого я вам не скажу.
Ответ написан
Комментировать
Singaporian
@Singaporian
Смотрите, если нужна прям полная автоматизация, что PIP не самый удобный вариант. Вам придется перейти на пакеты, стандартные для операционной системы (.deb, .rpm, ...).
В таком случае даже сами пакеты Python лучше всего переделать в стандартные пакеты. Сделать это очень легко:
pip install stdeb
(пример для пакета django-haystack)
/usr/local/bin/pypi-install django-haystack --release=2.6.1 --verbose=5 --keep

А дальше уже просто зависимости ставите в debian/control (или какой там файл у других ОС).

Но я бы начал на вашем месте с внимательного прочтения этой статьи о dh-virtualenv
Ответ написан
Комментировать
sanya84
@sanya84
Фанатик Python 3
pip install PyInstaller
в cmd или как там на LInux )
pyinstaller script_name.py --onefile --noconsole
Соберётся приложение со всеми библиотеками
в папке dist готовое приложение которое запуститься на Linux
на другом компьютере
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
18 янв. 2025, в 23:27
50000 руб./за проект
18 янв. 2025, в 21:28
1000 руб./за проект
18 янв. 2025, в 20:50
20000 руб./за проект