как сделать мой скрипт python легко переносимым? или как скомпилировать в двоичный файл со всеми зависимостями модуля?



Есть ли способ скомпилировать скрипт python в двоичный код?
У меня есть один файл python script, который использует много модулей.
Я бы хотел иметь его копию на других машинах (freebsd), но без установки всех необходимых модулей на каждом хосте.



Какие возможны решения в таких случаях?



Заранее спасибо!

571   5  

5 ответов:

Программы, которые могут сделать то, что вы просите:

Но, как уже упоминалось, вы также можете создать пакет с 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 на любом Хосте и все необходимые модули будут загружены и устанавливается автоматически.

  1. предположим, что у меня есть скрипт в виде пакета python
  2. скопировал его в другой хост
  3. запущен pip install mypackage

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

Это не очень хорошее решение в моем случае. Пользователи на других хостах(~20) должны иметь возможность запускать скрипт без дополнительной процедуры загрузки / установки.

Надеюсь, что cx_freeze - это то, что мне нужно. Спасибо за ответы.

Comments

    Ничего не найдено.