Какой лучший способ создать частную, автономную среду Python? - PullRequest
18 голосов
/ 07 января 2011

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

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

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

Есть предложения?

Ответы [ 3 ]

5 голосов
/ 07 января 2011

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

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

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

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

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

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

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

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

1 голос
/ 07 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...