找不到 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 模块,有教程吗?的主要内容,如果未能解决你的问题,请参考以下文章
无法为 angular-phonecat 教程安装 npm:找不到模块“update-notifier”