如何让我的Python脚本便于移植?或如何将其编译为包含所有模块依赖的二进制文件?

16 投票
4 回答
39964 浏览
提问于 2025-04-16 09:10

有没有办法把Python脚本编译成二进制文件?我有一个Python脚本文件,它用到了很多模块。我希望能在其他机器(比如FreeBSD)上使用这个脚本,但不想在每台机器上都安装所有需要的模块。

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

4 个回答

2

Python会在当前目录中查找import模块,所以你不需要把它们安装到Python的目录里。你的文件结构可能看起来像这样:

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

其中main.py文件里有import module1, module2的代码。

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" 就可以了。

20

可以满足你需求的程序有:

不过,正如之前提到的,你还可以使用Distribute来创建一个包,并把其他包作为依赖。然后你可以用 pip 来安装这个包,它会自动安装所有依赖的包。不过,你还是需要先安装Python和pip。

撰写回答