如何禁用 cx_freeze 以自动检测所有模块
Posted
技术标签:
【中文标题】如何禁用 cx_freeze 以自动检测所有模块【英文标题】:How to disable cx_freeze to autodetect all modules 【发布时间】:2013-05-27 08:48:44 【问题描述】:cx_freeze 构建包括安装在我机器上的所有模块,因此冻结构建变得庞大。如何禁用自动检测功能?我只想构建小型 PyQt 应用程序:
import sys
from cx_Freeze import setup, Executable
path = sys.path + ["app"]
includes = ["app.core", "app.utils"]
excludes = ["tcl"]
build_exe_options =
"path": path,
"icon": "resources\icons\clock.ico"
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "app",
version = "1.1",
description = "My Application",
options = "build_exe": build_exe_options,
executables = [Executable("app.py", base=base,
targetName="app.exe",
shortcutName="Application",
shortcutDir="DesktopFolder")])
还有我的自定义模块,每个都有一个 utils 子模块,所以 cx_freeze 放错了模块。
如何设置我需要的严格模块列表?
【问题讨论】:
它包含哪些不应该包含的模块?您可以将日志发布在pastebin中吗?不要忘记,您将需要几个用于 PyQt 和 Python 本身的库。 它包括我在我的计算机上安装的所有模块,例如 matplotlib、PIL、Tkinter。我在家里有一个带 Windows 的虚拟机,只需要最低限度的安装(python 和 PyQt)并且应用程序构建良好。但是在工作中我有很多包+自定义包,所以构建后应用程序失败。这里是日志。 pastebin.com/G5tp3QkH。我只想设置所需的最少模块,仅此而已 =) 如果代码中的某些内容加载了 matplotlib,则可能会引入 PIL、numpy 和 tkinter。尝试将 matplotlib 添加到“排除”。 【参考方案1】:这很简单。 此应用程序使用自定义模块,因此我已将应用程序文件夹添加到路径:
path = sys.path + ["app"]
诀窍是应用程序使用模块“utils”,而我的操作系统路径中有其他“utils”模块。其他“utils”模块导入了很多东西,比如 matplotlib、PIL 等。 所以我通过改变这样的路径环境解决了问题:
path = ["app"] + sys.path
因此,当冻结可执行文件时,cx_freeze 会获得正确的模块。
【讨论】:
以上是关于如何禁用 cx_freeze 以自动检测所有模块的主要内容,如果未能解决你的问题,请参考以下文章