更改 Python cx_Freeze 项目中的文件夹结构

Posted

技术标签:

【中文标题】更改 Python cx_Freeze 项目中的文件夹结构【英文标题】:Change folder structure in Python cx_Freeze project 【发布时间】:2017-09-12 14:17:28 【问题描述】:

我做了一个 Python 应用程序,我想构建一个 exe 文件来简化 Windows 用户之间的共享。我用过:

Python 3.6.1 cx_Freeze 模块 5.0.2

我得到了一个exe文件,但最终的结构让我哭了:

可执行文件 使用 Python 3.6 压缩存档 3 个 dll(python、sqlite、vcruntime) 21 个文件夹 10 个 pyd 文件

在我看来,这对用户来说并不方便,我想将文件夹和 pyd 文件移动到单独的文件夹或存档中(这样会更好)。有人知道怎么做吗?当前build.py

from cx_Freeze import setup, Executable

setup(
    name = 'myapp',
    version = '0.1',
    executables = [Executable(
        script='__main__.py',
        targetName='myapp.exe',
        icon='myapp.ico'
    )]
)

我应该为setup 函数添加哪些选项?是否可以在当前版本的 Python 和 cx_Freeze 中执行?或者我应该像this 那样修补cx_Freeze?

【问题讨论】:

【参考方案1】:

我的问题在 5.1 版本中几乎解决了。 build 目录中只有 5 项:

lib 文件夹 exe文件 3 个 dll(python36、sqlite、vcruntime)

对我来说没问题,但是 exe 文件不起作用。出现错误ModuleNotFoundError: no module named 'codecs'

已找到答案here。当前版本(目前是5.1)有错误,但是已经打了补丁。不幸的是,新版本 (5.1.1) 不在 PyPI 中。

不过,解决方案非常简单:从源代码构建cx_Freeze。提到了here。 (需要Visual Studio,我用的是2013的)。或者你可以等一会儿,我希望新版本很快就会出现在 PyPI 中。

【讨论】:

【参考方案2】:

cx_Freeze 5.1.1 同时在 PyPI 中,见 https://pypi.org/project/cx_Freeze/#history ; cx_Freeze 6.0b1 和预发布版本一样。

为了简化 Windows 用户之间的共享,您可以让 cx_Freeze 通过运行安装脚本来构建一个简单的安装程序:

python build.py bdist_msi

见http://cx-freeze.readthedocs.io/en/latest/distutils.html#distutils-setup-script

或者,为了制作更可定制的安装程序,您可以使用基于脚本的工具,例如 NSIS (Nullsoft Scriptable Install System),并在 cx_Freeze 设置脚本之后运行安装程序生成脚本。

【讨论】:

以上是关于更改 Python cx_Freeze 项目中的文件夹结构的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Python 3 的 cx_freeze 将一个项目打包成 8000+ 个文件,而 Python 2 的 cx_freeze 将同一个项目打包成 25 个文件?

cx_Freeze:主脚本中的 Python 错误。 Python 3.6 + cx_Freeze

[Python]使用cx_Freeze打包FastApi项目的方法以及遇到的问题

python 3.6中的cx_freeze

是否可以使用 pip 模块在 python 3 项目中使用 cx_freeze ?

Windows XP 中的 Python Cx_Freeze 错误