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

4
有没有一种方法可以将我的Python程序移动到其他计算机上,而不需要重新安装所有所需的模块呢?也许可以通过编译来实现?

你的意思是将其作为可执行文件运行吗? - Maroun
一个模块是什么意思?编译器呢? - Sagar D
我认为OP所问的是是否有一种方法可以在一台计算机上运行Python程序,并在另一台计算机上以完全相同的方式运行,而无需安装Python包(即在一台计算机上运行依赖于诸如numpy / scipy之类的东西的Python代码,在另一台没有安装这些包但仍应该运行的计算机上运行相同的代码)。 - rayryeng
3
我认为他在谈论将所有必需的Python库打包到Python程序中。 - Alessandro Suglia
@AlessandroSuglia - 就是这样。你刚刚比我说得更优美。 - rayryeng
显示剩余2条评论
4个回答

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的文档 这里


有支持Python 3.4.1的Python打包工具吗? - Dotan

1
如果你想让Python程序在另一台计算机上运行,PyInstallerpy2exe 是两个不错的推荐。
PyInstaller支持多种不同的操作系统:Windows,Linux,Mac OS等,而py2exe仅支持Windows。
有关详细信息,请访问:
PyInstaller: http://www.pyinstaller.org/ py2exe: http://www.py2exe.org/

1

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上工作,反之亦然。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接