不安装所需模块运行Python程序

4 投票
4 回答
10004 浏览
提问于 2025-04-18 18:20

有没有办法把我的Python程序移动到另一台电脑上,而不需要重新安装所有必需的模块呢?

也许可以通过编译来实现?

4 个回答

0

你可以把你的应用程序和它用到的所有纯Python模块打包成一个压缩文件。

这种方法的例子有youtube-dl和我自己的lamprop程序。

基本上,你需要创建一个文件夹,这个文件夹里包含所有模块的子文件夹,还有你的程序文件,这个程序文件应该命名为__main__.py

> ls
__main__.py  lamprop/
> ls lamprop/
__init__.py html.py latex.py parser.py text.py types.py

然后把这些内容打包成一个zip文件,并在UNIX类系统上添加一个shebang行;

cd src; zip -q ../foo.zip __main__.py lamprop/*.py
echo '#!/usr/bin/env python' >lamprop
cat foo.zip >>lamprop
chmod a+x lamprop
rm -f foo.zip

(上面的命令是为UNIX类系统写的。在Windows系统上,合并后的文件应该加上py扩展名,这样它就会交给Python解释器处理。)

Python解释器知道如何处理压缩的源代码档案。它会解压这些文件并运行__main__.py

你也可以把安装好的第三方模块复制到你的源代码目录中,并以同样的方式包含它们。但有几点需要注意:

  • 许可:如果你想包含第三方模块,它们的许可证必须允许你这样做。
  • 二进制模块:一些Python库,比如numpy,包含的共享库本质上是特定于平台的。在OS X或Linux上编译的numpy模块在Windows上是无法使用的,反之亦然。
1

你可以借助 pyinstaller 来执行它。

首先要安装 pyinstaller,方法是 -

pip install pyinstaller

使用方法 -

pyinstaller example.py

这会在一个名为 build/ 的子文件夹中生成可执行文件,而依赖的文件会在你脚本的源文件夹下的 dist/ 文件夹中。

ls -lha build/example/example
ls -lha dist/example/

有关手动操作的详细信息 - https://pyinstaller.readthedocs.io/en/stable/usage.html#running-pyinstaller-with-python-optimizations

1

如果你想让你的Python程序在另一台电脑上运行,那么PyInstallerpy2exe是两个不错的选择。

PyInstaller支持多种操作系统,比如Windows、Linux、Mac OS等等,而py2exe只支持Windows。

想了解更多,可以访问:

PyInstaller: http://www.pyinstaller.org/

py2exe: http://www.py2exe.org/

5

我觉得你在找的是 PyInstaller。简单来说,PyInstaller 是一个可以把 Python 程序打包成独立可执行文件的工具,支持的操作系统有 Windows、Linux、Mac OS X、Solaris 和 AIX。

截至目前,PyInstaller 还不支持 Python 3。不过,你可以查看 这篇关于冻结代码或打包的页面

Solution    | Windows | Linux | OS X | Python 3 | License | One-file mode | Zipfile import | Eggs | pkg_resources support
bbFreeze    | yes     | yes   |  yes | no       | MIT     | no            | yes            | yes  | yes
py2exe      | yes     | no    | no   | no       | MIT     | yes           | yes            | no   | no
pyInstaller | yes     | yes   | yes  | no       | GPL     | yes           | no             | yes  | no
cx_Freeze   | yes     | yes   | yes  | yes      | PSF     | no            | yes            | yes  | no

想了解 cx_Freeze 的使用说明,可以在 这里找到。

撰写回答