как сделать мой скрипт python легко переносимым? или как скомпилировать в двоичный файл со всеми зависимостями модуля?
Есть ли способ скомпилировать скрипт python в двоичный код?
У меня есть один файл python script, который использует много модулей.
Я бы хотел иметь его копию на других машинах (freebsd), но без установки всех необходимых модулей на каждом хосте.
Какие возможны решения в таких случаях?
Заранее спасибо!
5 ответов:
Программы, которые могут сделать то, что вы просите:
- PyInstaller: http://www.pyinstaller.org/ [Windows, Linux, OS X]
- cx_freeze: http://cx-freeze.sourceforge.net/ [Windows, Linux]
- py2exe: http://www.py2exe.org/ [Windows]
- py2app: http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html [os x]
Но, как уже упоминалось, вы также можете создать пакет с Distribute и иметь другие пакеты в качестве зависимости. Затем вы можете использовать
pipдля установки этого пакета, и он установит все пакеты. Однако вам все равно нужно установить Python и pip.
Cx_freeze добавит ваши скрипты python в автономный загрузчик Python и создаст каталог, содержащий программу и общие библиотечные зависимости. Затем вы можете скопировать полученный дистрибутив на другие машины, независимые от Python или ваших модулей.
$ cat hello.py print "Hello, World!" $ ls dist/ datetime.so _heapq.so hello libpython2.6.so.1.0 readline.so $ cat hello.py print "Hello, World!" $ cxfreeze hello.py ... <snip> ... $ ls dist/ datetime.so _heapq.so hello libpython2.6.so.1.0 readline.so $ ./dist/hello Hello, World!Лучшим ответом может быть создание пакета PIP, который идентифицирует эти третьи модули как зависимости, поэтому установка может быть такой же простой, как "pip install mypackage; ./ пакет "
Python также будет искать модули
importв текущем каталоге, поэтому вам не нужно устанавливать их в каталог python. Структура файла дистрибутива может выглядеть следующим образом:main.py module1/ __init__.py, ... module2/ __init__.py, ...Где main.py имеет
import module1, module2
Вероятно, вы хотите создать пакет Python из вашего скрипта. В итоге вы сможете сделать
pip install mypackageна любом Хосте и все необходимые модули будут загружены и установлены автоматически.
У меня есть скрипт, который импортирует эти модули: urllib, urllib2, cookielib, BaseHTTPServer, sys, tempfile, paramiko, logging, re, OptionParser, lxml.
Вы, вероятно, хотите создать Python пакет из вашего сценария. В конце вы сможете сделать установку pip mypackage на любом Хосте и все необходимые модули будут загружены и устанавливается автоматически.
- предположим, что у меня есть скрипт в виде пакета python
- скопировал его в другой хост
- запущен pip install mypackage
Как я понял, он будет искать модули, которые должны быть импортированы, и будетзагружать иустанавливать зависимости.
Это не очень хорошее решение в моем случае. Пользователи на других хостах(~20) должны иметь возможность запускать скрипт без дополнительной процедуры загрузки / установки.
Надеюсь, что cx_freeze - это то, что мне нужно. Спасибо за ответы.
Comments