Подтвердить что ты не робот

Автономные приложения Python в Linux

Как я могу распространять отдельное приложение Python в Linux?

Я думаю, что я могу считать само собой разумеющимся наличие недавнего интерпретатора Python в любом современном дистрибутиве. Проблема связана с теми библиотеками, которые не принадлежат к стандартной библиотеке, то есть wxPython, scipy, набору криптографических инструментов python, reportlab и т.д.

Есть ли работающий аналог Linux, скажем, py2exe (который, кстати, я никогда не пробовал)? Есть ли бесплатный, с открытым исходным кодом?

4b9b3361

Ответ 1

Создайте deb (для всего производного от Debian) и rpm (для Fedora/SuSE). Добавьте правильные зависимости к упаковке, и вы можете быть уверены, что она будет работать.

Ответ 2

Вы можете использовать cx_Freeze для этого. Это похоже на py2exe (объединяет интерпретатор и запуск script и все необходимые библиотеки и модули), но работает как в Linux, так и в Windows.

Он собирает зависимости из среды, в которой он запускается, а это значит, что они также должны быть подходящими для адресата. Если вы делаете что-то вроде построения 32-разрядного Debian и развертывания на другом 32-битном Debian, тогда это прекрасно. Вы можете обрабатывать 32/64 бит разности, создавая несколько версий в соответствующих средах (например, 32-битные и 64-битные chroots) и распределяя соответствующие. Если вам нужно что-то более общее (например, на Debian, развертывание в любом дистрибутиве), тогда это становится немного мрачным, в зависимости от того, каковы ваши зависимости.

Если вы делаете довольно простой дистрибутив (т.е. знаете, что среда сборки и среды развертывания схожи), это позволяет избежать довольно сложного шага rpm/deb/egg/etc (использование cx_Freeze очень просто, особенно если вы знакомы с py2exe). Если нет, то все, что от прокатки вашего установщика зависимостей до deb/rpm/egg/etc, будет работать, в зависимости от того, сколько работы вы хотите сделать, сколько гибкости с требуемыми версиями вы хотите предложить и каковы зависимости.

Ответ 3

Вы можете посмотреть объявления зависимостей в setuptools. Это может обеспечить способ гарантировать, что правильные пакеты либо доступны в среде, либо могут быть установлены кем-либо с соответствующими правами.

Ответ 4

Вы не можете легко сделать это в нейтральном формате. Единственные надежные механизмы отслеживания зависимостей встроены в системы управления пакетами в дистрибутивах и будут варьироваться от распределения к распределению. Вам действительно нужно делать rpm для fedora, debs для ubuntu и debian и т.д.

Py2exe отлично работает в Windows. Он создает дистрибутив со всей необходимой DLL и оболочкой для интерпретатора python, который запускает вашу программу. Это довольно просто установить - просто отбросьте его в каталог, поэтому создание файла MSI для него тривиально.

Ответ 5

Setuptools для меня слишком много, так как мое использование программы довольно ограничено, поэтому здесь моя домашняя альтернатива.

Я свяжу "сторонний" каталог, который включает все предварительные условия и использует site.addsitedir, поэтому их не нужно устанавливать глобально.

# program startup code
import os
import sys
import site
path = os.path.abspath(os.path.dirname(__file__))
ver = 'python%d.%d' % sys.version_info[:2]
thirdparty = os.path.join(path, 'third-party', 'lib', ver, 'site-packages')
site.addsitedir(thirdparty)

В большинстве моих предварительных настроек есть setup.py installers. Каждый подключенный модуль получает свой собственный процесс "установки", поэтому любые настраиваемые материалы (например,./configure) могут запускаться автоматически. Моя установка script запускает этот make файл как часть процесса установки.

# sample third-party/Makefile
PYTHON_VER = `python -c "import sys; \
        print 'python%d.%d' % sys.version_info[:2]"`
PYTHON_PATH = lib/$(PYTHON_VER)/site-packages
MODS = egenix-mx-base-3.0.0 # etc

.PHONY: all init clean realclean $(MODS)
all: $(MODS)
$(MODS): init
init:
    mkdir -p bin
    mkdir -p $(PYTHON_PATH)
clean:
    rm -rf $(MODS)
realclean: clean
    rm -rf bin
    rm -rf lib

egenix-mx-base-3.0.0:
    tar xzf [email protected]
    cd [email protected] && python setup.py install --prefix=..
    rm -rf [email protected]

Ответ 7

Я думаю, что вы можете довольно безопасно использовать предоставленную поддержку python для большинства современных дистрибутивов Linux - для тех, у кого нет, до тех пор, пока дано сообщение об ошибке, пользователи, вероятно, смогут работать, как получить их самостоятельно ( вы можете использовать простой bash запуск script для этого):

#!/bin/bash
if [ -e /usr/bin/python ]
then
    echo "Python found!"
else
    echo "Python missing!"
fi

Ответ 8

Неа.

Python, как известно, является flaky относительно различных настроек. Единственный разумный способ развертывания приложения python - отправить весь комплект интерпретатора и библиотек, на которые вы полагаетесь своим кодом. Это, скорее всего, будет работать.