Как лучше всего создать частную автономную среду Python?

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

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

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

Какие-либо предложения?


person Community    schedule 07.01.2011    source источник
comment
Это для вашего собственного использования или вы хотите упаковать его для распространения? Немного непонятно.   -  person Lennart Regebro    schedule 07.01.2011
comment
Для личного пользования. В идеале мне нужна портативная среда, которую я могу перемещать с машины на машину с той же базовой архитектурой и операционной системой.   -  person    schedule 07.01.2011


Ответы (3)


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

  • Загрузите, скомпилируйте и установите python в каталог проекта (т.е. python-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 в сценарии вашего приложения может выглядеть следующим образом:
#!.../install directory/toolchain python

print "Hello World!"
  • You should now be able to distribute a directory like this:
    • package/
      • python-toolchain/
      • app/
person dietbuddha    schedule 07.01.2011

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

person maranas    schedule 07.01.2011
comment
Я больше искал способ иметь переносимую среду разработки, которую можно было бы установить на каждую используемую мной машину, а не замороженную систему для распространения. Но, возможно, эти упаковочные программы можно использовать и для замораживания среды разработки ... - person ; 07.01.2011
comment
Понятно. В этом случае вы можете просто попробовать использовать setuptools для создания исходного дистрибутива с определенным install_requires, чтобы он получал все необходимые вам зависимости от pypi. После этого для создания среды разработки на другом компьютере достаточно будет просто загрузить исходники на этот компьютер и запустить сценарий установки. - person maranas; 10.01.2011

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

См. Также здесь дополнительные предложения:

Относительно этого заявления:

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

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

person Mark Byers    schedule 07.01.2011
comment
Верно. Вещи, которые обычно входят в состав ОС. Но специальные библиотеки, используемые конкретным пакетом - person ; 07.01.2011