我正在构建一个Python应用程序,不想强迫我的客户安装Python和模块。
那么,有没有办法将Python脚本编译为独立的可执行文件呢?
你可能喜欢py2exe。你还可以在那里找到关于Linux的信息。
您可以使用PyInstaller将Python程序打包为独立的可执行文件。它适用于Windows、Linux和Mac。
PyInstaller快速入门从PyPI安装PyInstaller:pip install pyinstaller转到您的程序目录并运行:pyinstaller yourprogram.py这将在名为dist的子目录中生成包。pyinstaller -F yourprogram.py添加-F(或--onefile)参数将所有内容打包到单个“exe”中。pyinstaller -F --paths=<your_path>\Lib\site-packages yourprogram.py遇到“输入错误”,您可能会考虑侧包。 pip install pynput==1.6.8仍在运行导入-Eror r-尝试降级pyinstall er-请参阅将pynput与pyInster一起使用时出错有关更详细的走查,请参见手册。
从PyPI安装PyInstaller:
pip install pyinstaller
转到您的程序目录并运行:
pyinstaller yourprogram.py
这将在名为dist的子目录中生成包。
dist
pyinstaller -F yourprogram.py
添加-F(或--onefile)参数将所有内容打包到单个“exe”中。
pyinstaller -F --paths=<your_path>\Lib\site-packages yourprogram.py
遇到“输入错误”,您可能会考虑侧包。
pip install pynput==1.6.8
仍在运行导入-Eror r-尝试降级pyinstall er-请参阅将pynput与pyInster一起使用时出错
有关更详细的走查,请参见手册。
第三个选项是cx_Freeze,它是跨平台的。
cx_Freeze
您可以使用py2exe作为已经回答并使用Cython转换.pyc中的键.py文件,C编译文件,如Windows中的.dll和Linux上的.so。
.pyc
.py
.dll
.so
它比普通的.pyo和.pyc文件更难恢复(并且还获得了性能!)。
.pyo
对于Python 3.2脚本,唯一的选择是cx_Freeze。从源代码构建它;否则它将无法工作。
对于Python 2. x,我建议使用PyInstaller,因为它可以将Python程序打包为单个可执行文件,这与输出库的cx_Freeze不同。
我还推荐PyInstaller以获得更好的向后兼容性,例如Python 2.3-2.7。
对于py2exe,您必须拥有Python 2.6。
您可能希望研究Nuitka。它采用Python源代码并将其转换为C++API调用。然后它编译成可执行二进制文件(Linux上的ELF)。它已经存在了几年,并支持广泛的Python版本。
如果您使用它,您可能还会获得性能改进。推荐使用。
使用py2exe……使用以下设置文件:
from distutils.core import setupimport py2exe from distutils.filelist import findallimport matplotlib setup(console = ['PlotMemInfo.py'], options = {'py2exe': {'packages': ['matplotlib'],'dll_excludes': ['libgdk-win32-2.0-0.dll','libgobject-2.0-0.dll','libgdk_pixbuf-2.0-0.dll']}},data_files = matplotlib.get_py2exe_datafiles())
py2exe将生成您想要的EXE文件,但您需要在要使用新EXE文件的机器上拥有相同版本的MSVCR90.dll。
有关更多信息,请参阅教程。
您可以找到分发工具中列出的分发实用程序列表。
我使用BBC冻结,它一直工作得很好(虽然还没有Python 3支持)。
我想编译一些关于使用Python 2.7在Windows上创建独立文件的有用信息。
我已经使用了py2exe并且它有效,但我遇到了一些问题。
它显示了在Windows 64位中创建单个文件的一些问题:使用bundle_files=1与py2exe不起作用;
需要创建一个setup.py文件使其工作。http://www.py2exe.org/index.cgi/Tutorial#Step2;
我遇到了依赖关系的问题,您必须通过在安装文件中导入包来解决;
我无法让它与pyqt一起工作。
最后一个原因让我尝试PyInstallerhttp://www.pyinstaller.org/。
在我看来,这是更好的,因为:
我建议使用以下行创建一个. bat文件(pyinstaller.exe必须在Windows路径中):
pyinstaller.exe --onefile MyCode.py
您可以创建一个文件,以及其他选项(https://pyinstaller.readthedocs.io/en/stable/usage.html#options)。
我使用PyInstaller和多重处理包只有一个问题,通过使用这个食谱解决了:https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing。
所以,我认为,至少对于python 2.7,一个更好更简单的选择是PyInstaller。
不完全是Python代码的打包,但现在还有来自Google的脾气暴躁,它将代码转译为走。
它不支持Python C API,因此它可能不适用于所有项目。
使用Cython转换为C,编译并与GCC链接。
另一种可能是,在C中制作核心函数(你想让它们难以逆转的函数),编译它们并使用Boost. Python导入编译后的代码(加上你得到更快的代码执行)。然后使用提到的任何工具来分发。
是的,可以将Python脚本编译为独立的可执行文件。
PyInstaller可用于将Python程序转换为windows、Linux、macosx、FreeBSD、Solaris和AIX下的独立可执行文件。它是推荐的转换器之一。
py2exe将Python脚本转换为仅在Windows平台上可执行的文件。
Cython是Python编程语言和扩展Cython编程语言的静态编译器。
我听说PyRun也是一个选项。它目前支持Linux、FreeBSD和Mac OS X。
使用PyInstaller,我发现了一个更好的方法,使用快捷方式到. exe而不是制作--onefile。无论如何,可能有一些数据文件,如果你运行的是基于站点的应用程序,那么你的程序也依赖于超文本标记语言,JavaScript和CSS文件。将所有这些文件移动到某个地方没有任何意义…相反,如果我们向上移动工作路径怎么办?
--onefile
创建EXE文件的快捷方式,将其移动到顶部并将目标和起始路径设置为指定的路径,使相对路径指向dist\文件夹:
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exeStart in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
我们可以将快捷方式重命名为任何内容,因此重命名为“GTFS-Manager”。现在,当我双击快捷方式时,就好像我python运行了该文件!我发现这种方法比--onefile 更好:
python
python3 myfile.py
哦,记得在构建后删除构建文件夹。它会节省大小。
我喜欢PyInstaller-特别是“窗口”变体:
pyinstaller --onefile --windowed myscript.py
它将创建一个单独的*. exe文件在一个文件夹中。
pyinstaller yourfile.py -F --onefile
这将在Windows上创建一个独立的EXE文件。
重要提示1:EXE文件将在名为“dist”的文件夹中生成。
重要提示2:不要忘记--onefile标志
您可以使用pip install PyInstaller安装PyInstaller
pip install PyInstaller
注意:在极少数情况下,存在隐藏的依赖项……因此,如果您运行EXE文件并获得丢失的库错误(在下面的示例中为win32timezone),请使用以下内容:
pyinstaller --hiddenimport win32timezone -F "Backup Program.py"
由于目前的答案列表中似乎缺少它,我认为值得一提的是,标准库包括一个zipapp模块,可以用于此目的。它的基本用法只是将一堆Python文件压缩成扩展名为.pyz的zip文件,可以直接作为python myapp.pyz执行,但你也可以从requirements.txt文件制作一个自包含的包:
zipapp
.pyz
python myapp.pyz
requirements.txt
$ python -m pip install -r requirements.txt --target myapp$ python -m zipapp -p "interpreter" myapp
其中interpreter可以类似于/usr/bin/env python(参见指定解释器)。
interpreter
/usr/bin/env python
通常,生成的.pyz/.pyzw文件应该是可执行的,在Unix中是因为它被标记为可执行的,在Windows中是因为Python安装通常会注册这些扩展名。然而,只要用户在路径中有python3.dll,创建一个Windows可执行文件就应该工作相对容易。
.pyzw
python3.dll
如果您不想要求最终用户安装Python,您可以将应用程序与可嵌入的Python包一起分发。