将自定义 .py 文件打包成 .exe

Packing custom .py files into .exe

我做了一个小项目,其中包括将各种 python 文件导入另一个 python 文件。这是我的目录结构。

Main_Folder
|_ my_main_file.py
|_ Sites (a directory inside Main_Folder)
  |_ __init__.py
  |_ some_other.py

这基本上是我的目录结构。此 some_other.py 通过以下命令导入到我的 my_main_file.py 中:

from Sites import *

我正在导入该目录中的所有内容。所以,我想做的是将整个项目变成一个 独立的二进制文件 。我使用 pyintaller 将我的 .py 文件转换为 .exe。但是,我只编写了将所有内容都放在 1 个文件中的脚本,这使得任务变得简单。但是,这一次,我想尝试一些新的东西。

我的 python 脚本接受命令行参数并且可以正常工作。如果没有命令行参数,python 脚本将无法运行。我可以转换为 exe,但即使我给出参数,该 exe 也什么都不做。

所以,我从 pyinstaller 得到了一个 .spec 文件,并修改它以获得我的 some_other.py 文件。 SPEC 文件如下所示:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['my_main_file.py'],
             pathex=['C:\Users\User Name\Main_Folder'],
             binaries=None,
             datas=[('Sites/*.py','Sites')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='my_main_file',
          debug=False,
          strip=False,
          upx=True,
          console=True )

这会产生一个 .exe,但那个 exe 不会 work.The exe 不会显示任何内容。但是,它的大小大约为 11 MB。有什么东西吗? 我试过 nuitka,但是那个给出了一个关于无法找到 gendef.exe 的错误,我对安装 minGW 并不感兴趣。

顺便说一句,我在 64 位机器上,py2exe 的 bundle_file:1 对我不起作用。

我建议您使用 cx_Freeze,这是我认为最好的 python 代码打包器。

安装

安装非常简单,只需下载并安装此 cx_Freeze installer (this one if you are on python 3.4) taken from the official PyPi package site。完成后,打开 cmd 和 运行 python cxfreeze-postinstall

py 与 cx_Freeze

一起执行

最快的方法是在项目的父目录上打开命令提示符,然后 运行ning cxfreeze <your .py script>。这将创建一个 dist 文件夹,其中包含您的主程序及其导入的所有模块。

但是,如果您想更进一步并在使代码成为可执行文件时有更多的选择,您可以按照 here 的说明制作 setup.py,然后 运行在 cmd python setup.py build 中。与前面的方法不同,这会创建一个名为 build 的目录,其中包含另一个目录,该目录具有您正在编译的平台的名称。现在,里面有可执行文件和库。