我正在构建一个Python应用程序,不想强迫我的客户端安装Python和模块。我也想让我的应用程序闭源。
那么,有没有办法将Python脚本编译为独立的可执行文件?
答案 0 :(得分:192)
您可以使用PyInstaller将Python程序打包为独立的可执行文件。它适用于Windows,Linux和Mac。
PyInstaller快速入门
从PyPI安装PyInstaller:
pip install pyinstaller
转到程序目录并运行:
pyinstaller yourprogram.py
这将在名为
dist
的子目录中生成捆绑包。有关更详细的演练,请参阅manual。
答案 1 :(得分:189)
您可以使用已经回答的py2exe并使用cython转换.py
中的密钥.pyc
文件,C编译文件,例如Windows中的.dll
和Linux中的.so
一样,比常见的.pyo
和.pyc
文件更难恢复(并且还可以获得性能!)
答案 2 :(得分:74)
您可能希望调查Nuitka。它需要python源代码并将其转换为C ++ API调用。然后它编译成可执行的二进制文件(Linux上的ELF)。它已经存在了几年,并支持各种Python版本。
如果您使用它,您可能也会获得性能提升。推荐使用。
答案 3 :(得分:25)
第三个选项是cx_Freeze
,它是跨平台的。
答案 4 :(得分:23)
我想编译一些有关使用Python 2.7在Windows上创建独立文件的有用信息。
我使用了 py2exe 并且它有效,但我遇到了一些问题。
在Windows 64位中创建单个文件时出现了一些问题:Using bundle_files = 1 with py2exe is not working;
必须创建一个setup.py文件才能生效。 http://www.py2exe.org/index.cgi/Tutorial#Step2;
我遇到了必须通过在安装文件中导入包来解决的依赖项问题;
我无法与PyQt一起工作..
这最后一个原因让我尝试 PyInstaller http://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。
答案 5 :(得分:20)
是的,可以将Python脚本编译成独立的可执行文件。
PyInstaller可用于将Python程序转换为独立的可执行文件,位于 Windows , Linux , Mac OS X 下, FreeBSD , Solaris 和 AIX 。它是推荐的转换器之一。
py2exe将Python脚本转换为Windows平台中的可执行文件。
Cython是Python编程语言和扩展的Cython编程语言的静态编译器。
答案 6 :(得分:17)
你可能会喜欢py2exe。你也会在那里找到在linux上做这件事的信息
答案 7 :(得分:13)
使用py2exe ....使用下面的设置文件:
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import 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()
)
答案 8 :(得分:9)
我还建议pyinstaller
为了更好的向后兼容性,如python 2.3 - 2.7。
对于 py2exe ,你必须有python 2.6
答案 9 :(得分:8)
对于Python 3.2脚本,唯一的选择是Cxfreeze。从源代码构建它,否则它将无法工作。
对于python 2.x我建议使用pyinstaller,因为它可以将python程序打包在一个可执行文件中,这与CxFreeze不同,后者也输出库。
答案 10 :(得分:7)
pyinstaller yourfile.py -F --onefile
这将在Windows中创建一个独立的EXE文件 重要说明1:exe文件将在名为“ dist”的文件夹中生成 重要说明2:不要忘记--onefile标志
您可以使用pip install PyInstaller
答案 11 :(得分:6)
您可以找到@ https://wiki.python.org/moin/DistributionUtilities列出的分发实用程序列表。
我使用bbfreeze并且它一直运行良好(但仍然支持python 3)。
答案 12 :(得分:6)
py2exe将生成您想要的exe文件,但您需要在您将要使用新exe的机器上安装相同版本的MSVCR90.dll。有关详细信息,请参阅http://www.py2exe.org/index.cgi/Tutorial。
答案 13 :(得分:4)
不完全是python代码的打包,但现在还有来自google的grumpy,它将代码转换为Go。它不支持python C api,因此它可能不适用于所有项目。
答案 14 :(得分:2)
使用Cython转换为c,编译并与gcc链接。另一个可能是,使c中的核心函数(你想要反转的那些),编译它们并使用python boost来导入已编译的代码(加上你得到更快的代码执行)。然后使用提到的任何工具进行分发。
答案 15 :(得分:2)
使用pyinstaller,我找到了一个更好的方法,使用.exe的快捷方式而不是--onefile
。无论如何,可能有一些数据文件,如果您正在运行基于站点的应用程序,那么您的程序也依赖于html,js,css文件。没有必要将所有这些文件移动到某处...而是如果我们移动工作路径的话。
创建exe的快捷方式,将其移到顶部并按指定设置目标和启动路径,使相对路径转到dist \ folder:
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
可以将快捷方式重命名为任何内容,以便重命名为" GTFS-Manager"
现在,当我双击快捷方式时,就像我运行python一样!我发现这种方法比--onefile
更好:
哦,记得在构建后删除build文件夹,将保存大小。
答案 16 :(得分:1)
我被告知PyRun https://www.egenix.com/products/python/PyRun/也是一种选择。
答案 17 :(得分:1)
答案 18 :(得分:1)
由于当前答案列表中似乎缺少该功能,因此我认为值得一提的是,标准库包含一个zipapp
模块,可用于此目的。它的基本用法是将一堆Python文件压缩为扩展名为.pyz
的zip文件,然后直接以python myapp.pyz
的身份执行,但是您也可以使用{{1} }文件:
requirements.txt
$ python -m pip install -r requirements.txt --target myapp
$ python -m zipapp -p "interpreter" myapp
可能类似于interpreter
(请参阅Specifying the Interpreter)。
通常,生成的/usr/bin/env python
/ .pyz
文件应该是可执行文件,在Unix中因为它被标记为这样,而在Windows中则是可执行的,因为Python安装通常会注册这些扩展名。但是,只要用户在路径中有.pyzw
,make a Windows executable就可以正常工作。
如果您不希望最终用户安装Python,则可以将应用程序与the embeddable Python package一起分发。