本文介绍了使用cx_Freeze,PyQt5,Python3构建的exe无法导入ExtensionLoader_PyQt5_QtWidgets.py并运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我正在尝试使用cx_Freeze打包我的应用程序Python3(适用于Windows的PyQt5)。
我已经安装了Python 3.4.3,Python-win32,PyQT5和cxfreeze。
应用程序本身可以在控制台中正常运行。

I'm trying to pack my app Python3, PyQt5 for Windows using cx_Freeze.I've installed Python 3.4.3, Python-win32, PyQT5, cxfreeze.Application itself, run in console, works fine.

我尝试将其与cx_freeze打包在一起:
python setup.py build_exe。
它在同一主机上工作。但是,当我将其移至另一个全新安装的WinXP时,会出现错误:

I try to pack it with cx_freeze:python setup.py build_exe.It works on the same host. But when I move it to another clean installation WinXP it gives an error:

Traceback:
File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27 in <module>
File "pyftp1.py" in 7, in <module>
File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", in 2237, in _find_and_load
File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", in 2226, in _find_and_load_unlocked
File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", in 1191, in _load_unlocked
File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", in 1161, in _load_backward_compatible
File "ExtensionLoader_PyQt5_QtWidgets.py", line 22, in <module>
File "ExtensionLoader_PyQt5_QtWidgets.py", line 14, in __bootstrap__
ImportError: DLL load failed: Не найден указанный модуль.

英语:未找到指定的模块。

English: "specified module was not found".

这是我的setup.py:

Here's my setup.py:

import sys
from cx_Freeze import setup, Executable

includes = ['sys', 'PyQt5', 'PyQt5.Core', 'PyQt5.QtGui', 'PyQt5.QtWidgets', 'os', 'os.path', 'ftplib',
    'traceback', 'time',]
excludes = []
packages = ['os', 'PyQt5']
path = []
build_exe_options = {
   'includes': includes,
   'excludes': excludes,
   'packages': packages,
   'path'    : path,
   #'dll_includes': ['msvcr100.dll'],
   'include_msvcr' : True,
   'include_files': [
       (r'C:\Windows\System32\msvcr100.dll', 'msvcr100.dll'),
   ],

}


base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

setup(
    name = "pyftp1",
    version = "0.1",
    description = "Foto uploader",
    options = {'build_exe_options': build_exe_options},
    executables = [Executable("pyftp1.py", base=base, appendScriptToLibrary=False, copyDependentFiles=True)]
)

我也发现它没有复制msvcr100.dll文件,但是我已经说了两次!我已将其手动复制到目标主机。

Also I found it doesn't copy msvcr100.dll file, however I've stated it twice! I've copied it manually to target host.

这里是pyftp1.py:

Here's pyftp1.py:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys, time, os, hashlib
import ftplib
import traceback
from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog  # <-- Line 7
from PyQt5.QtWidgets import QPushButton, QHBoxLayout, QVBoxLayout, QScrollArea, QLineEdit, QCheckBox
from PyQt5 import QtGui
from PyQt5.QtGui import QIcon, QPalette, QLinearGradient, QColor, QBrush
from PyQt5.QtCore import QObject, QThread, pyqtSignal, pyqtSlot


推荐答案

解决方案。



时间长了一个问题,我找到了解决方案。许多操作方法没有说明软件的特定版本,使用的某些特定模块,甚至没有在未安装库dll的新系统上检查.exe。这是经过验证的有效解决方案。

Solution.

After struggling during a lot of time with a problem I've found the solution. Many how-to do not take an account specific versions of software, or some specific modules used, or even they do not check .exe on fresh system, which has no your libraries dlls and so on. Here's working and tested solution.

首先,我删除了cx_freeze并使用了py2exe。
我已经在32位WinXP上构建了所​​有东西-目的是它可以在几乎所有系统上运行。
您需要:

First, I removed cx_freeze and used py2exe.I've built all the stuff on WinXP 32-bit - for the goal it could be run on nearly every system.You need:


  • Win XP 32位(或您认为是最低要求的其他系统)

  • Python 3.4-从www.python.ord / download安装Windows x86 msi安装程序

  • PyWin32-从sf.net pywin32-219.win32.py3安装。 4.exe

  • Qt5.5-从qt.io安装它,也会得到mingw,接下来将文件夹C:\Qt\Tools\mingw492_32\bin添加到您的系统环境%PATH%。

  • 用于Windows的Git-从git-scm.com安装

  • PyQt5-从riverbankcomputing.co.uk下载win32 x86安装程序并运行它

  • SIP-最糟糕的安装!


    • 从riverbankcomputing.co.uk下载,

    • 解压缩,

    • 运行Git Bash,

    • python configure.py -p win32-g ++,

    • mingw32-make.exe安装。

    • 失败(。您手动转到sipgen /文件夹,然后将sip.exe复制到c:\Python34。接下来转到../siplib并将sip.pyd复制到c:\ \python34\Lib\site-packages,然后

    • strip /c/Python34/Lib/site-packages/sip.pyd

    • cp sip.h / c / Python34 / include /

    • Win XP 32-bit (or another system which you consider as minimal requirements)
    • Python 3.4 -- install from www.python.ord/download Windows x86 msi installer
    • PyWin32 -- install from sf.net pywin32-219.win32.py3.4.exe
    • Qt5.5 -- install it from qt.io, also you get mingw, next add folder C:\Qt\Tools\mingw492_32\bin to your system env %PATH%.
    • Git for Windows -- install from git-scm.com
    • PyQt5 -- download from riverbankcomputing.co.uk win32 x86 installer and run it
    • SIP -- the worst intallation!
      • Download it from riverbankcomputing.co.uk,
      • unzip,
      • run Git Bash,
      • python configure.py -p win32-g++ ,
      • mingw32-make.exe install.
      • It fails (. You go manually to sipgen/ folder and copy sip.exe to c:\Python34. Next go to ../siplib and copy sip.pyd to c:\python34\Lib\site-packages, then
      • strip /c/Python34/Lib/site-packages/sip.pyd
      • cp sip.h /c/Python34/include/

      接下来,我将setup.py添加到项目中:

      Next I added setup.py to the project:

      from distutils.core import setup
      import os, sys
      import py2exe
      from glob import glob
      import PyQt5
      
      NAME="ProgName"
      
      qt_platform_plugins = [("platforms", glob(PyQt5.__path__[0] + r'\plugins\platforms\*.*'))]
      data_files.extend(qt_platform_plugins)
      msvc_dlls = [('.', glob(r'C:\Windows\System32\msvc?100.dll'))]
      data_files.extend(msvc_dlls)
      # print(data_files)
      
      sys.argv.append('py2exe')
      
      setup(
          data_files=data_files,
          # windows=["pyftp1.py",],
          windows=[
              {
                  "script": "pyftp1.py",
                  "icon_resources": [(0, "resources/favicon.ico")]
              }
          ],
          # zipfile=None,
          options={
              "py2exe": {
                  "includes":["sip", "atexit",],
                  # "packages": ['PyQt5'],
                  "compressed": True,
                  "dist_dir": "dist/" + NAME,
                  # "bundle_files": 0,
                  # "zipfile": None,
                  "optimize": 2,
              }
          }
      )
      

      只是不要执行所有操作手动,您可以添加Makefile

      Just not to run all the actions manually, you may add Makefile

      # start settings
      DIST=dist
      # change NAME also in setup.py and resource/config.txt
      NAME=ProgName
      EXT=exe
      
      # final name and location of the built program
      FINAL=$(DIST)/$(NAME).$(EXT)
      
      # external programs
      7ZIPDIR="C:\Program Files\7-Zip"
      RESHACKER="/c/Program\ Files/Resource\ Hacker/ResourceHacker.exe"
      
      # intermediate steps
      
      # no icon version of program
      NOICON=$(DIST)/$(NAME)_no_icon.$(EXT)
      
      # name of .7z archive
      7Z_BASENAME=$(NAME).7z
      7Z=$(DIST)/$(7Z_BASENAME)
      
      # folder with ready .exe
      PROGDIR=$(DIST)/$(NAME)
      
      all: $(FINAL)
      
      
      $(FINAL): $(NOICON)
          # change icon
          "$(RESHACKER)" -addoverwrite $(NOICON), $(FINAL), resources/favicon.ico, ICONGROUP, MAINICON, 0
      
      
      $(NOICON): $(7Z)
          #build autorunning sfx with default icon
          cat $(7ZIPDIR)/7zS.sfx resources/config.txt $(7Z) > $(NOICON)
      
      
      $(7Z): exe
          # compress program folder to .7z
          cd $(DIST);  $(7ZIPDIR)\\\7z.exe a  $(7Z_BASENAME)  $(NAME)
      
      
      exe:  $(DIST)
          # build program itself
          python setup.py py2exe
      
      
      $(DIST):
          # create dist directory
          # echo $(DIST)/
      
      
      clean:
          rm -rf $(DIST)/*
      

      现在您可以轻松地构建程序本身-作为文件文件夹:
      mingw32-make.exe exe
      或使用正确的图标制作单个文件:
      mingw32-make.exe全部
      或清理所有内容:
      mingw32-make.exe干净

      Now you can easily build your program itself - as a folder of files: mingw32-make.exe exeOr make a single file with correct icon: mingw32-make.exe allOr clean that all stuff: mingw32-make.exe clean

      这篇关于使用cx_Freeze,PyQt5,Python3构建的exe无法导入ExtensionLoader_PyQt5_QtWidgets.py并运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

      1403页,肝出来的..

09-08 20:49