Модуль cx-freeze не найден, учебник для кого-нибудь? - PullRequest
0 голосов
/ 05 января 2020

Как мне изменить мой 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

1 Ответ

0 голосов
/ 07 января 2020

Я использовал cx-freeze 6.0. Установлено cx-freeze 6.1 (только что выпущено). Снова заморозил мое приложение. Установил его на целевой машине. Задача решена!

PS: на целевом компьютере уже установлена ​​распространяемая версия Microsoft Visual C ++ 2015 (x86) -14.0.24123; это требование; более новая версия как 2017 также работает; в противном случае вы получите еще одну ошибку.

...