Создание Portable Python (локальная установка) для Linux

Я хочу создать следующее:

Переносимая версия python, которая может быть запущена в любой системе (с любой предыдущей версией python или без установленного python) и предварительно настроена на различные пакеты python (например, django, lxml, pysqlite и т. Д.)

Ближайшее, что я нашел выше,virtualenv, но это только так далеко.

Если я упаковываю хороший virtualenv для python на одной машине, он содержит ссылки на многие библиотеки, которые ему нужны. Я могу взять эти ссылки и преобразовать их в их настоящие файлы, но если я попытаюсь переместить весь этот каталог на другую машину, я получу ошибку сегмента после ошибки сегмента.

Чтобы запустить python на другом компьютере, я использую:

LD_LIBRARY_PATH=lib/ ./bin/python

и в lib / I есть все общие библиотеки, которые я скопировал с исходного компьютера. Проблема здесь заключается в том, что эти общие библиотеки могут полагаться на другие общие библиотеки, которые я не включаю, поэтому выполнение этого в других дистрибутивах Linux не работает. Вероятно, из-за этого к более старым общим библиотекам, установленным в системе, которые не работают с тем, что я скопировал.

У кого-нибудь есть идея, как заставить это работать? Это вообще возможно?

EDIT:

Чтобы уточнить, желаемый результат заключается в создании tar.gz двоичного файла Python и связанных с ним пакетов (django, lxml, pysqlite и т. Д.), Которые можно извлечь и запустить в любой системе на основе linux, т.е. (ubuntu 8.04, redhat 5, suse). 11 и т. Д.), Все 32-битные дистрибутивы, где локально установленная версия python не влияет на то, что в tar.gz.

 Dhara28 июн. 2012 г., 20:10
Там уже существуетportable python Или, еще проще, использовать Python в нескольких средах без установки, сpython everywhere

Ответы на вопрос(5)

Я не уверен, что работать исключительно на Python - это то, что нужно. Возможно, вам повезет больше с Puppet of Chef - инструментами настройки, которые можно использовать для создания локальной среды. Существует множество кода для установки virtualenv и python практически на любой Linux плюс OSX (хотя, возможно, не на Windows).

Ваш рабочий процесс должен был бы установить chef или Puppet (ваш выбор), запустить скрипт для установки желаемого Python, затем ввести virtualenv и установить pip любые пакеты, которые вам могут понадобиться.

Извините, это не так просто, как виртуалвен, но это гораздо надежнее.

Я не знаю, как это вообще возможно. Если бы это было так, им не нужно было бы распространять бинарные пакеты python для разных платформ. Вы не можете просто распространять python, который будет работать на любой платформе. Он должен быть построен из источника для этой арки. Virtualenv будет ожидать, что вы скажете ему, какой системный Python использовать (используя ссылки).

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

Вы можете, однако, достичь части того, что вы хотите. То есть запуск python на другой машине, на которой не установлен python, если он имеет ту же самую арку. Это та же самая концепция позадизаморозкаили py2exe / py2app / pyinstaller. Переводчик включен в автономную среду. Таким образом, приложение может работать на любой подобной платформе.

Edit

Я только что понял, что пока ваш вопрос говорит о "системе" Агностически, ваш заголовок содержит ссылку "linux". Существует множество разновидностей linux, поэтому для того, чтобы он работал, вы должны построить его жирным для нескольких арок, а также полностью содержать отдельные ссылки. Вы можете попробовать создать пакет сpyinstaller и использовать это, чтобы включить в ваш проект.

Вы можете попробовать просто собрать python из исходного кода в вашем virtualenv:

$ ./configure --prefix=/path/to/virtualenv && make && make install

Если у вас все еще есть проблемы со ссылками на библиотеки, вы можете также исследоватьстроить это статически

Я только что проверил это, и это прекрасно работает.

Получите копию python, которую вы хотите установить, распакуйте ее и сначала перейдите в папку unararred.

Также получите копию setuptools и распакуйте это.

/opt/portapy ниже используется, конечно, только имя, которое я придумал для этого поста, это может быть любой путь, и должен быть указан полный путь, и тот же путь должен использоваться в любых системах, на которые вы его указываете, из-за абсолютного связывания пути.

mkdir /opt/portapy
cd <python source dir>
./configure --prefix=/opt/portapy && make && make install
cd <setuptools source dir>
/opt/portapy/bin/python ./setup.py install

Создайте виртуальную папку env внутри папки portapy.

mkdir /opt/portapy/virtenv
/opt/portapy/bin/virtualenv /opt/portapy/virtenv
cd /opt/portapy/virtenv
source bin/activate

Готово. Вы готовы установить все свои библиотеки здесь и можете создать несколько виртуальных окружений таким образом.

Вы можете смолить весь/opt/portapy папку и перенести ее в любую систему Linux с той же самой аркой, в пределах разумного я подозреваю.

Я скомпилировал 2.7.5 ond centOS 5.8 64bit и переместил папку в систему Cent6.9, и она отлично работает.

 05 дек. 2013 г., 10:55
@tahoe, возможно ли поместить папку с python в каталог с другим именем, отличным от каталога на первом компьютере? Есть ли обходные пути?
 20 сент. 2013 г., 18:18
Выглядит чисто и многообещающе, мне нужно что-то подобное для среды без прав root, надеюсь, это работает!
 11 апр. 2014 г., 13:15
Это решение отлично работает. Примечание: убедитесь, чтоcheck the GNU libc version, Если вы компилируете python в Linux с GNU libc 2.14 и пытаетесь запустить на другом компьютере с Linux GNU libc 2.5, это выдаст ошибку.
 09 янв. 2014 г., 00:02
Это должно быть возможно, но вам нужно отредактировать скрипт активации, чтобы он указывал на правильный каталог, я думаю. Кроме того, я должен отметить, что это работает лучше всего, если это делается на очень похожих системах, поскольку я столкнулся с проблемой, связанной с этим, между Ubuntu и CentOS, где пакеты SSL были скомпилированы для совершенно разных версий и не загружались.

Ну, поскольку я редко принимаю «не могу», есть способ сделать это. Предупреждение: это не красиво, и вы, вероятно, должны рассмотреть другой сценарий.

То, что вам нужно, это определить стандартное местоположение для этого каталога верхнего уровня. Во-вторых, используя этот каталог в качестве корневого, вам нужно будет скомпилировать Python для каждого дистрибутива Linux, на котором вы хотите его запустить. Для этого вы должны использовать что-то вроде & quot; / usr / local / myappname / platform / & quot; настроить и скомпилировать Python для жизни. В каждом случае подставьте «платформу». с названием платформы, например "/ usr / local / rhel /". Если память служит параметром конфигурации, который вы ищете здесь - --prefix.

После того, как вы скомпилировали каждый дистрибутив, вам понадобится скрипт, который определит, какой из них использовать, и либо установите переменные окружения, либо он создаст символические ссылки на соответствующую & quot; установку & quot; питона. Затем я использовал бы virtualenv и начальную загрузку в этом дереве, чтобы сохранить "в использовании" библиотеки python еще более специфичны.

Я не могу вспомнить распространенный дистрибутив Linux, в котором по умолчанию нет Python. Таким образом, вы можете использовать setup.py и / или базовые скрипты Python для этого, так как вы должны иметь возможность полагаться на присутствие Python - даже если его старая версия, как в RHEL, установлена. Лично я считаю, что вышеописанный метод слишком сложен, но он будет соответствовать вашим заявленным требованиям с учетом окончательного сценария. Конечно, вы можете использовать shar (SHell ARchive), чтобы объединить все это в работающий сценарий оболочки, чтобы выполнить установку и избежать необходимости использования дополнительных сценариев. Если вы распакуете полученный архив шелла, вы можете распаковать его на целевых системах и выполнить, чтобы все настроить.

Все, что сказал, я бы не рекомендовал это. Я бы порекомендовал определить минимальную версию Python, на которой вы можете работать, и убедиться, что она устанавливается дистрибутивом, когда это возможно, и, если необходимо, отключается от репозитория и устанавливается. Затем используйте virtualenv и начальную загрузку с require.txt для установки необходимых библиотек и приложений python в virutalenv. Для этого см.эта документация

Вы можете попробовать это: http://downloads.activestate.com/ActivePython/ Посмотрите в меню: Загрузки & gt; & gt; ActivePython

Ваш ответ на вопрос