Как сделать мой скрипт на Python легко переносимым?или как скомпилировать в двоичный файл со всеми зависимостями модуля? - PullRequest
13 голосов
/ 29 декабря 2010

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

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

Ответы [ 4 ]

16 голосов
/ 30 декабря 2010

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

Но, как уже упоминалось, вы также можете создать Пакет с Распределением и использовать другие пакеты в качестве зависимостей. Затем вы можете использовать pip для установки этого пакета, и он установит все пакеты. Вам все еще нужно установить Python и pip.

3 голосов
/ 29 декабря 2010

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;

2 голосов
/ 29 декабря 2010

Возможно, вы хотите создать пакет Python из вашего скрипта. В итоге вы сможете выполнить pip install mypackage на любом хосте, и все необходимые модули будут загружены и установлены автоматически.

См. Этот вопрос о том, как создать такой пакет .

2 голосов
/ 29 декабря 2010

Python также будет искать import модули в текущем каталоге, поэтому вам не нужно устанавливать их в каталог python.Структура вашего дистрибутивного файла может выглядеть следующим образом:

main.py
module1/
    __init__.py, ...
module2/
    __init__.py, ...

Где main.py имеет import module1, module2

...