找不到 cx-freeze 模块,有教程吗?

Posted

技术标签:

【中文标题】找不到 cx-freeze 模块,有教程吗?【英文标题】:cx-freeze module could not be found, tutorial anyone? 【发布时间】:2020-01-05 14:02:18 【问题描述】:

如何修改我的 setup.py 以便 cx-freeze 找到丢失的模块?这是我的 setup.py:

# Usage: Each project must have its own folder. 
# python setup.py build -> build on project directory 
# python setup.py bdist_msi -> bdist_msi to distribute 
# python setup.py install -> on "C:\Program Files" > "access denied" by Windows
# Using: 
# Python          3.7 
# cffi            1.13.2 
# cryptography    2.8    
# cx-Freeze       6.0    
# cycler          0.10.0 
# kiwisolver      1.1.0  
# matplotlib      3.1.2  
# numpy           1.17.4 
# pip             19.3.1 
# pycparser       2.19   
# pyparsing       2.4.5  
# PyQt5           5.13.2 
# PyQt5-sip       12.7.0 
# python-dateutil 2.8.1  
# scipy           1.3.3  
# setuptools      41.2.0 
# six             1.13.0 

from cx_Freeze import setup, Executable
buildOptions = dict(packages = [], excludes = [], include_files = [], includes = [])

import sys
base = 'Win32GUI' if sys.platform=='win32' else None

executables = [
    Executable('FatigueCalculator.py', base=base)
]

setup(name='', # do not use \, :, etc. 
    version = '0.1',
    description = 'App. for college course Intermediate Mechanics',
    author="Echeban",
    author_email="",
    url="http//mecanica.cadec-online.com",# you can download the .msi
    options = dict(build_exe = buildOptions),
    executables = executables)

在我阅读的许多帖子中(但我很难理解)我可以生成一个 .msi intaller,使用它在另一台机器上安装应用程序,如果安装了 Python 和 PyQt5 但未安装它,它将工作另一台未安装这些的机器。我得到的错误是找不到第 3 行模块。这是我的 App 的 import 部分,所以你可以看到第 3 行是什么:

import sys
import numpy as np 
from PyQt5.QtGui import QDoubleValidator
from FatigueDialog import Ui_Dialog # in QtDesigner, using "Dialog"
from PyQt5.QtWidgets import QDialog, QApplication, QListWidgetItem, QDialogButtonBox, QMessageBox
from FatigueKernel import *
from FatigueInteractionCriteria import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import QIcon, QPixmap

问题似乎是PyQt5.QtGui。接下来,我将违规行移到了列表的底部

import sys
import numpy as np 
from FatigueDialog import Ui_Dialog # in QtDesigner, using "Dialog"
from FatigueKernel import *
from FatigueInteractionCriteria import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtGui import QDoubleValidator
from PyQt5.QtWidgets import QDialog, QApplication, QListWidgetItem, QDialogButtonBox, QMessageBox

现在在 FatigueDialog.py 的第 10 行失败了,它来自主 App 的第 3 行。这是第 10 行:

from PyQt5 import QtCore, QtGui, QtWidgets

所以,我知道 cx-freeze 无法获取 PyQt5。在 PyQt5 的第一个实例中,它失败了。 但是如何修改我的 setup.py 以使其工作?

附录

为了简化我的帮助请求,我下载了 cx 开发人员 Anthony Tuininga 提供的示例代码。这是一个非常简单的应用 PyQt5app.py,和 setup.py 一起去,

sample code

我跑(venv375-32) python setup.py bdist_msi 在我的开发机器中,使用 Windows 10、Python 3.7.5-32 位、PyQt5 5.13.2、PyQt5-sip 12.7.0。然后 cx-freeze 6.0 与

python setup.py bdist_msi > PyQt5app_setup_log.txt

构建在 dev 上运行良好。机器。 我将 .msi 复制到没有安装 PyQt5 的机器上。我安装了 .msi,当我尝试运行它时,我收到了这个错误:

File PyQt5app.py Line 5 in <module> import error DLL load failed: The specified module could not be found.

应用程序中的第 5 行是: from PyQt5.QtWidgets import QApplication, QWidget

似乎在目标机器上安装 PyQt5 DLL 失败,但在安装过程中没有错误,只有在尝试运行应用程序时。

添加一个发布输出的链接

python setup.py bdist_msi > PyQt5app_setup_log.txt

我使用 cx-freeze 6.0。 对于 PyQt5app,我得到 46208 KB 的 msi。 是否足够容纳 Python 3.7 和 PyQt?

PyQt5app_setup_log.txt

【问题讨论】:

如果你使用buildOptions = dict(packages = [], excludes = [], include_files = [], includes = ['PyQt5.QtCore', 'PyQt5.QtGui', 'PyQt5.QtWidgets'])会发生什么? @musicamante 没有名为“PyQt5.QtCore”的模块。也许提供路径?但是怎么做? 是在使用 cx_Freeze 构建二进制文件时还是在尝试运行构建的可执行文件时给出的错误? 使用 cx-freeze 构建二进制文件时没有错误。在构建目录中找到的 .exe 在开发机器中运行良好。在开发机器中安装 msi 也可以正常工作。在没有安装 python 和 PyQt5 的目标机器上运行通过 msi 安装的应用程序时发生错误。 请参阅附录,来自信誉良好的来源的完整最小示例,发生同样的问题,易于安装在您的机器上。 【参考方案1】:

我使用的是 cx-freeze 6.0。已安装cx-freeze 6.1(刚刚发布)。再次冻结我的应用程序。将其安装在目标机器上。问题解决了!

PS:目标机器已经安装了 Microsoft Visual C++ 2015 Redistributable (x86)-14.0.24123;这是一项要求;像 2017 这样的较新版本也可以使用;否则你会得到另一个错误。

【讨论】:

以上是关于找不到 cx-freeze 模块,有教程吗?的主要内容,如果未能解决你的问题,请参考以下文章

NestJS Jest 找不到具有绝对路径的模块

错误:找不到 npm 模块“时刻”

无法为 angular-phonecat 教程安装 npm:找不到模块“update-notifier”

找不到模块“newman”需要堆栈:

可以在 Ubuntu 中使用 cx-freeze 将 python 脚本冻结为 Windows 可执行文件吗?

易语言:错误(36): 找不到指定的对象成员命令名称“打开”。