如何在Python中创建可执行文件?

10

我想制作一个Python应用程序的可执行文件(.exe)。

我想知道如何实现,但需要注意的是:我使用了一个C++ DLL!

我需要将DLL与.exe文件放在一起,还是还有其他方法?


2
请参考以下相关(非重复)的SO问题:https://dev59.com/OHI-5IYBdhLWcg3wwbZL - mjv
7个回答

11

py2exe可以生成单文件可执行程序。请查看此链接了解示例。

我使用的setup.py使用以下选项组合:

'compressed': 1,
 'optimize':2,
 'bundle_files': 1

我通常将外部dll(例如msvcr71.dll)添加到可执行文件所在的同一文件夹中。

为了方便分发和在生成exe后自动安装,您可以使用Inno Setup创建一个安装程序,将您的exe,dll和其他文档(readme等)放入应用程序目录中。


4

按照以下步骤进行操作:您可以在此网站中找到此文档。

1)安装PyInstaller:

假设您已经在此目录c:\PythonXX\Scripts中安装了PIP,如果没有,请转到此网站并查看有关如何“安装Python索引项目(PIP)”的说明。进入命令提示符并键入以下命令。

  • 输入cd c:\Python27\Scripts进入该目录,按Enter键
  • 然后输入-> pip install pyinstaller再次按Enter键
  • 这样就成功安装了PyInstaller!
  • 注意:安装完成后不需要将pyinstaller放在Scripts文件夹中,这样做是因为我们需要使用PIP来安装pyinstaller文件。为了使事情更加有组织,我通常会将pyinstaller文件移动到另一个文件夹中。要移动pysintaller文件,请转到包含pyinstaller文件的Scripts文件夹,并查找以“pyi”开头的所有文件,您还可以查看修改日期列,以查看同时创建的文件。应该有24个pyi文件在您运行上面的脚本时被创建。将这些文件复制到您选择的另一个文件夹中,我通常在C:\驱动器中创建一个名为“CreateExecutables”的文件夹,并在其中再创建一个名为“pyinstaller_files”的文件夹。

2) 安装PyWin32:

转到此站点并查找名为pywin32-218.win32-py2.7.exe 2.7的可执行文件,它适用于python27的32位系统,请查找与您相对应的版本。运行可执行文件,它应该可以成功安装与pyinstaller配合使用的PyWin32!

3) 创建单个可执行文件

现在,您已经安装了PyInstaller和PyWin32,可以开始创建单个可执行文件。单个可执行文件将在另一个名为“dist”的文件夹中创建,当您运行pyinstaller命令时,该文件夹也会动态创建。为了清楚起见,您的pyinstaller文件已被复制到另一个文件夹中,可能称为“pyinstaller_files”文件夹,因此现在在命令提示符中键入以下命令。

  • c:\python27\CreateExecutables\pyinstaller_files>pyinstaller --onefile c:\test\test1\yourscript.py
  • 注意:yourscript.py的目录是您拥有pydev模块的位置。

4) 概述

上述命令将在pyinstaller_files文件夹内创建一个名为“dist”的文件夹,其中包含您的单个可执行文件“yourscript.exe”。您现在可以将单个可执行文件移动到任何您选择的位置,并删除“dist”和“build”文件夹以及“yourscript.spec”文件,因为它们不再需要运行您的单个可执行文件。


2
使用py2exe。您可以将DLL放在与最终EXE相同的文件夹中,应该可以正常加载。

1

看一下pyinstaller。它应该会为你找到(并相应地打包)这些依赖项。


1

我已经使用以下这些工具从 Python 2.7 代码构建了 exe 文件:

  • Cython(使用 --embed 选项)
  • Nuitka
  • Py2exe

它们都将产生一个独立的 exe 文件。你的安装程序必须包括所需的 CRT dlls。对于普通用户而言,你的最终结果与任何其他 exe 文件无异。

前两个先编译为 C,然后使用你安装的任何编译器将其编译为最终的 exe 文件。Py2Exe 将 Python 和所有.pyo 文件捆绑到一个zip文件中,然后将其嵌入到 exe 文件中。启动时,它会将文件解压缩到临时目录并从那里运行 Python。你需要将你的dll添加到 .spec 文件中,以便将其包含在zip资源中。或者,将你的dll文件与exe文件放置在同一目录下,并在Python中使用绝对路径来加载它。


0

PyInstaller是最佳选择,因为它在Windows和Linux上都能很好地工作。 如果您正在使用arch linux,请使用此链接:PyInstaller或尝试yaourt pyinstaller


0

cx_Freeze 也是一个不错的选择。

cx_Freeze 是一组用于将 Python 脚本冻结为可执行文件的脚本和模块。


好的,我看到问题的评论了,我刚刚也注意到那个问题的被接受的答案是一个人推荐 cx_Freeze。不过我还是会在这里保留这个答案。 - Loko

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