如何使我的python脚本易于移植?或者如何使用所有模块依赖项编译成二进制文件?

时间:2010-12-29 17:50:16

标签: python binary freebsd

有没有办法将python脚本编译成二进制文件? 我有一个文件python脚本,它使用了很多模块。 我想要的是在其他机器(freebsd)上复制它,但不在每个主机上安装所有需要的模块。

在这种情况下有哪些可能的解决方案?

4 个答案:

答案 0 :(得分:16)

可以满足您要求的程序包括:

但如前所述,您还可以创建一个包含Distribute的Package,并将其他包作为依赖项。然后,您可以使用pip来安装该软件包,它将安装所有软件包。不过,你仍然需要安装Python和pip。

答案 1 :(得分:3)

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; ./package”一样简单

答案 2 :(得分:2)

Python还会在当前目录中查找import个模块,因此您不必将它们安装到python目录中。您的分发文件结构可能如下所示:

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

其中main.py有import module1, module2

答案 3 :(得分:2)

您可能希望从脚本中创建Python包。最后,您将能够在任何主机上执行pip install mypackage,并且将自动下载并安装所有必需的模块。

See this question on how to create such a package