更改 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项目的方法以及遇到的问题