不安装所需模块运行Python程序
有没有办法把我的Python程序移动到另一台电脑上,而不需要重新安装所有必需的模块呢?
也许可以通过编译来实现?
4 个回答
你可以把你的应用程序和它用到的所有纯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上是无法使用的,反之亦然。
你可以借助 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
如果你想让你的Python程序在另一台电脑上运行,那么PyInstaller和py2exe是两个不错的选择。
PyInstaller支持多种操作系统,比如Windows、Linux、Mac OS等等,而py2exe只支持Windows。
想了解更多,可以访问:
PyInstaller: http://www.pyinstaller.org/
py2exe: http://www.py2exe.org/
我觉得你在找的是 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 的使用说明,可以在 这里找到。