我正在开发一个Python应用程序,不想强迫我的客户安装Python和模块。我还想让我的应用程序成为闭源的。
那么,有没有一种方法可以将Python脚本编译成独立的可执行文件?
你可以使用 PyInstaller 将 Python 程序打包成独立的可执行文件。它可以在 Windows、Linux 和 Mac 上运行。
PyInstaller快速入门
从PyPI安装PyInstaller。
pip install pyinstaller
进入你的程序目录并运行。
pyinstaller yourprogram.py
这将在一个名为`dist'的子目录中生成捆绑包。
关于更详细的演练,请参见手册。
你可以使用已经回答过的[py2exe][2],使用[cython][1]将你的关键.py
文件转换为.pyc
,C编译文件,就像Windows中的.dll
和linux中的.so
一样,比常见的.pyo
和.pyc
文件更难还原(还能获得性能上的提升!)
[1]: http://cython.org/ [2]: http://www.py2exe.org/
我想编译一些关于使用Python 2.7在windows上创建独立文件的有用信息。
我使用了py2exe,它可以工作,但我遇到了一些问题。
它在Windows 64位创建单机文件时出现了一些问题。 https://stackoverflow.com/questions/2909240/using-bundle-files-1-with-py2exe-is-not-working。
需要创建一个setup.py文件才能工作。 http://www.py2exe.org/index.cgi/Tutorial#Step2。
我曾遇到过依赖性的问题,你必须通过在setup文件中导入包来解决。
我无法让它与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是一个更好更简单的选择。
是的,可以将Python脚本编译成独立的可执行文件。
PyInstaller][1]可以在Windows、Linux、Mac OS X、FreeBSD、Solaris、AIX下,将Python程序转换为独立的可执行文件。 是推荐的转换器之一。
py2exe][2] 可以将Python脚本转换为只能在Windows平台上执行的脚本。
Cython][3] 是 Python 编程语言和扩展的 Cython 编程语言的静态编译器。
[1]: http://www.pyinstaller.org/ [2]: http://www.py2exe.org/ [3]: http://cython.org/
使用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()
)
对于Python 3.2脚本,唯一的选择是Cxfreeze。 从源码中构建它,否则它将无法工作。
对于 python 2.x,我建议使用 pyinstaller,因为它可以将 python 程序打包成一个可执行文件,而不像 CxFreeze,它还会输出库。
使用pyinstaller,我发现了一个更好的方法,使用快捷方式到.exe,而不是使--onefile
。
总之,周围可能有一些数据文件,如果你正在运行一个基于网站的应用程序,那么你的程序也依赖于html、js、css文件。
没有点在移动所有这些文件的地方。
相反,如果我们将工作路径上移。
为exe做一个快捷方式,把它移到最上面,然后按指定的方式设置目标和启动路径,使其有相对路径到dist/dist/folder。
目标: %windir%system32/cmd.exe /c start distweb_wrapper/web_wrapper.exe
%windir%system32cmd.exe /c start distweb_wrapper_web_wrapper.exe
开始在。
"%windir%/system32/cmd.exe /c start dist\web_wrapper/"
可以将快捷方式重命名为任何东西,所以重命名为"GTFS-Manager"。
现在,当我双击快捷方式时,就像我用python运行文件一样!
我发现这个方法比--onefile
的方法好,因为。
我的python脚本使用的所有文件(它'是部署一个龙卷风web服务器,需要整个畸形的'。 网站价值的文件在那里!)不需要移动任何地方。 我只需在顶部创建快捷方式。
实际上,我可以在ubuntu(运行python3 myfile.py)和windows(双击快捷方式)中使用这个完全相同的文件夹。
我不需要费心去黑掉.spec文件中过于复杂的数据文件等。
呵呵,建完后记得把build文件夹删掉,会节省大小。