Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用cx_Freeze、PyQt5、Python3构建的exe无法导入ExtensionLoader_PyQt5\u qtwidts.py并运行_Windows_Python 3.x_Python Import_Cx Freeze_Pyqt5 - Fatal编程技术网

Windows 使用cx_Freeze、PyQt5、Python3构建的exe无法导入ExtensionLoader_PyQt5\u qtwidts.py并运行

Windows 使用cx_Freeze、PyQt5、Python3构建的exe无法导入ExtensionLoader_PyQt5\u qtwidts.py并运行,windows,python-3.x,python-import,cx-freeze,pyqt5,Windows,Python 3.x,Python Import,Cx Freeze,Pyqt5,我正在尝试使用cx\U Freeze为Windows打包我的应用程序Python3、PyQt5。 我已经安装了Python 3.4.3、Python-win32、PyQT5和cxfreeze。 在控制台中运行的应用程序本身工作正常 我尝试用cx\U freeze将其打包: python setup.py build_exe。 它在同一台主机上工作。但是,当我将其移动到另一个干净的WinXP安装时,会出现一个错误: Traceback: File "C:\Python34\lib\site-pac

我正在尝试使用cx\U Freeze为Windows打包我的应用程序Python3、PyQt5。 我已经安装了Python 3.4.3、Python-win32、PyQT5和cxfreeze。 在控制台中运行的应用程序本身工作正常

我尝试用cx\U freeze将其打包: python setup.py build_exe。 它在同一台主机上工作。但是,当我将其移动到另一个干净的WinXP安装时,会出现一个错误:

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: Не найден указанный модуль.
我还发现它没有复制msvcr100.dll文件,但我已经声明了两次!我已将其手动复制到目标主机

这里是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
你可以试试这个:

将“libEGL.dll”添加到您的工作文件夹中。这来自Python3x\Lib\site packages\PyQt5

在cx freeze setup.py中添加:

如果sys.platform==win32: includefiles=['libEGL.dll']如果需要,您应该在此处添加其他文件

在cx freeze setup.py中,link includefibles可生成以下选项:

生成\执行\选项={ ... ... “包含文件”:包含文件, }

你可以试试这个:

将“libEGL.dll”添加到您的工作文件夹中。这来自Python3x\Lib\site packages\PyQt5

在cx freeze setup.py中添加:

如果sys.platform==win32: includefiles=['libEGL.dll']如果需要,您应该在此处添加其他文件

在cx freeze setup.py中,link includefibles可生成以下选项:

生成\执行\选项={ ... ... “包含文件”:包含文件, }

解决方案 在为一个问题奋斗了很长时间之后,我找到了解决办法。许多how-to不考虑特定版本的软件,或使用的某些特定模块,甚至不检查fresh系统上的.exe,该系统没有您的库DLL等等。这是一个有效且经过测试的解决方案

首先,我删除了cx_freeze并使用了py2exe。 我已经在32位WinXP上构建了所有的东西——为了实现这个目标,它几乎可以在每一个系统上运行。 你需要:

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\u 32\bin添加到系统环境%PATH%。 Git for Windows-从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包,然后 strip/c/Python34/Lib/site-packages/sip.pyd cp sip.h/c/Python34/包括/ py2exe-python-m pip安装py2exe 7-Zip-作为x86 exe从7-Zip.org安装 7-zip额外文件,解压缩到已安装的7-zip文件夹中,与.txt文件的冲突可以忽略 资源黑客-来自angusj.com-但是,如果您不想最终设置为修补您的.exe并给它一个漂亮的图标,则不必这么做 接下来,我将setup.py添加到项目中:

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

# 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 或者使用正确的图标创建单个文件: mingw32-make.exe所有 或者清理所有的东西: mingw32-make.exe清除

解决方案。 在为一个问题奋斗了很长时间之后,我找到了解决办法。许多how-to不考虑特定版本的软件,或使用的某些特定模块,甚至不检查fresh系统上的.exe,该系统没有您的库DLL等等。这是一个有效且经过测试的解决方案

首先,我删除了cx_freeze并使用了py2exe。 我已经在32位WinXP上构建了所有的东西——为了实现这个目标,它几乎可以在每一个系统上运行。 你需要:

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\u 32\bin添加到系统环境%PATH%。 Git for Windows-从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包,然后 strip/c/Python34/Lib/site-packages/sip.pyd cp sip.h/c/Python34/包括/ py2exe-python-m pip安装py2exe 7-Zip-作为x86 exe从7-Zip.org安装 7-zip额外文件,解压缩到已安装的7-zip文件夹中,与.txt文件的冲突可以忽略 资源黑客-来自angusj.com-但是,如果您不想设置为修补您的.exe,则不需要它 最后,给它一个漂亮的图标 接下来,我将setup.py添加到项目中:

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

# 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 或者使用正确的图标创建单个文件: mingw32-make.exe所有 或者清理所有的东西:
mingw32-make.exe clean

我试图手动添加它,但没有效果。这些方法之间有区别吗?对不起,我不清楚。这是一种单一方法,请按照步骤1、2、3进行操作谢谢!好的,我明白你的意思了。不幸的是,我没有帮助我尝试手动添加它-但没有效果。这些方法之间有区别吗?对不起,我不清楚。这是一种单一方法,请按照步骤1、2、3进行操作谢谢!好的,我明白你的意思了。不幸的是,我没有帮忙