Как мне изменить мой 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 не найден . Вот раздел 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.Qt Gui , Затем я переместил оскорбительную строку почти в конец списка
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
, и теперь произошел сбой в строке 10 файла FatigueDialog.py, который происходит из строки 3 основного приложения. Вот строка 10:
from PyQt5 import QtCore, QtGui, QtWidgets
Итак, я понимаю, что cx-freeze не может получить PyQt5. При первом запуске PyQt5 происходит сбой. Но как мне изменить мой setup.py, чтобы он работал?
ADDENDUM
Чтобы упростить мой запрос о помощи, я загрузил пример кода, предоставленный cx-разработчиком Энтони Туининга. Это очень простое приложение PyQt5app.py и setup.py для него go,
пример кода
Я запускаю (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 на целевом компьютере, но во время установки ошибки не возникает, только при попытке запустить приложение.
ДОБАВЛЕНО ссылка на publi sh вывод
python setup.py bdist_msi > PyQt5app_setup_log.txt
Я использую cx-freeze 6.0. Для PyQt5app я получаю msi 46208 КБ. Это достаточно большой, чтобы вместить Python 3,7 и PyQt?
PyQt5app_setup_log.txt