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

Какой лучший способ сделать частную, автономную среду python?

Я хочу создать частную автономную среду Python, которая не связывается с системными библиотеками (как это делает virtualenv), а также включает в себя собственные версии стандартных библиотек C/С++ для пакетов Python, которые являются просто оболочками для эти библиотеки (например, PIL и libjpeg).

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

Вопрос в том, есть ли инструмент, который делает это легко сделать? Virtualenv почти достает меня туда, особенно. с -no-site-пакетами и флагами -relocatable, но это не решает проблему для стандартных библиотек "C". Я хочу, чтобы иметь возможность создавать PIL, например, который использует приватную личную версию libjpeg и libpng

Любые предложения?

4b9b3361

Ответ 1

Звучит так, как вы на самом деле после этого можете связать определенную установку python и script с дистрибутируемым пакетом. Вы можете сделать следующее:

  • Загрузите, скомпилируйте и установите python в каталог проекта (например, python-toolchain)
  • Создайте префикс script (toolchain), который будет относить относительный путь и обновлять PATH, PYTHONPATH, LD_LIBRARY_PATH динамически.
#!/bin/sh

# If your clever you can determine install directory dynamically
prefix='install directory'
toolchain=$prefix/python-toolchain
export PATH=$toolchain/bin:$prefix/app/bin:$PATH
export LD_LIBRARY_PATH=$toolchain/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$prefix/app/lib:$PYTHONPATH
exec $*
  • Волшебный файл cookie в вашем приложении script может выглядеть следующим образом:
#!.../install directory/toolchain python

print "Hello World!"
  • Теперь вы можете распространять каталог следующим образом:
    • package/
      • python-toolchain/
      • app/

Ответ 2

Попробуйте cx_Freeze или py2exe. Они используются для упаковки приложений Python, чтобы сделать их распространяемыми и включать все пакеты/библиотеки, от которых он зависит.

Ответ 3

Я успешно использовал py2exe. Там также cx_Freeze.

См. также дополнительные советы:

Относительно этого утверждения:

который не ссылается на системные библиотеки

Вы, конечно, не можете полностью устранить, что для этого требуются некоторые системные библиотеки. Если вы хотите использовать приложение Windows, ему придется использовать Windows API, например. Я предполагаю, что вы не хотите связывать всю копию Windows с вашим приложением, если на них не установлена ​​Windows.