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

问题描述 投票:13回答:4

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

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

python binary freebsd
4个回答
16
投票

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

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


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
投票

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

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

哪个main.py有import module1, module2


2
投票

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

See this question on how to create such a package

© www.soinside.com 2019 - 2024. All rights reserved.