如何禁用 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 以自动检测所有模块的主要内容,如果未能解决你的问题,请参考以下文章

Cx_Freeze - 自动包含模块

cx_freeze 忽略自定义变量模块

怎么禁止开机自动启动软件

Cx_Freeze - 如何包含模块

如何在magento中禁用自定义模块

黑群晖怎么使用 ethtool命令