属性错误:模块'PyQt5'没有'__version__'属性。

11

我试图将一个Python文件转换为.exe文件,但是在这两行代码中,我遇到了这个问题。

import cv2
exit()
Traceback (most recent call last):
  File "d:\anaconda3\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "d:\anaconda3\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "D:\Anaconda3\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
  File "d:\anaconda3\lib\site-packages\PyInstaller\__main__.py", line 114, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "d:\anaconda3\lib\site-packages\PyInstaller\__main__.py", line 65, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "d:\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 758, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "d:\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 705, in build
    exec(code, spec_namespace)
  File "D:\solar_cell\main.spec", line 7, in <module>
    a = Analysis(['main.py'],
  File "d:\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 254, in __init__
    self.__postinit__()
  File "d:\anaconda3\lib\site-packages\PyInstaller\building\datastruct.py", line 159, in __postinit__
    self.assemble()
  File "d:\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 433, in assemble
    self.graph.process_post_graph_hooks(self)
  File "d:\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 373, in process_post_graph_hooks
    module_hook.post_graph(analysis)
  File "d:\anaconda3\lib\site-packages\PyInstaller\depend\imphook.py", line 451, in post_graph
    self._load_hook_module()
  File "d:\anaconda3\lib\site-packages\PyInstaller\depend\imphook.py", line 408, in _load_hook_module
    self._hook_module = importlib_load_source(
  File "d:\anaconda3\lib\site-packages\PyInstaller\compat.py", line 637, in importlib_load_source
    return mod_loader.load_module()
  File "<frozen importlib._bootstrap_external>", line 522, in _check_name_wrapper
  File "<frozen importlib._bootstrap_external>", line 1027, in load_module
  File "<frozen importlib._bootstrap_external>", line 852, in load_module
  File "<frozen importlib._bootstrap>", line 265, in _load_module_shim
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "d:\anaconda3\lib\site-packages\PyInstaller\hooks\hook-PyQt5.py", line 14, in <module>
    from PyInstaller.utils.hooks.qt import pyqt5_library_info, get_qt_binaries
  File "d:\anaconda3\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 122, in <module>
    pyqt5_library_info = Qt5LibraryInfo('PyQt5')
  File "d:\anaconda3\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 50, in __init__
    if hooks.is_module_satisfies("PyQt5 >= 5.15.4"):
  File "d:\anaconda3\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 533, in is_module_satisfies
    version = get_module_attribute(module_name, version_attr)
  File "d:\anaconda3\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 329, in get_module_attribute
    raise AttributeError(
AttributeError: Module 'PyQt5' has no attribute '__version__'

如果我只是打印一些东西,例如:print('dsfdsfs'),那么它可以成功地打包成 .exe 文件。

我的环境:
win10
pyinstaller 5.0.dev0
opencv-python 4.5.2.54
pyqt 5.9.2

我使用 anaconda 命令提示符来完成此操作。


我也遇到了类似的错误。 - vinsent paramanantham
7个回答

12

我正在使用pyinstaller和anaconda prompt,发现了相同的问题,为了解决它,您需要

pip install PyQt5 --user --use-feature=2020-resolver

然后再次运行pyinstaller。


显示消息,没有这样的选项:--use-feature。 - Abhilash Singh Chauhan
@AbhilashSinghChauhan 这是pip的问题,请尝试升级到最新版本的pip,然后再次尝试 python -m pip install --upgrade pip - Nestor Mejía

5

尝试使用 "pip install PyQt5" 命令,然后再次运行程序。


没帮助,我正在使用 Python 3.6.7,pip 安装 PyQt5。 - vinsent paramanantham
1
在我的情况下起作用。 - Abhilash Singh Chauhan

3
我通过手动将 __version__ = "5.15.4" 添加到 venv/Lib/site-packages/PyQt5/__init__.py 解决了这个问题,其中 venv 是 PyQt5 安装在其中的虚拟环境。

之前:

...
# 
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.


# Support PyQt5 sub-packages that have been created by setuptools.
__path__ = __import__('pkgutil').extend_path(__path__, __name__)

def find_qt():
...

之后:

...
# 
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.


# Support PyQt5 sub-packages that have been created by setuptools.
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
__version__ = "5.15.4"

def find_qt():
...

2
我可以确认这对我起作用了,尽管我不确定这是最佳解决方案。这是一个快速运作的小技巧! - Anthony

1

在浪费了太多时间后,我更新了PyInstaller,然后它就奏效了。


PyInstaller的哪个版本? - constructor
1
在我的情况下,它是: 成功卸载 pyinstaller-4.5.1 成功安装 pyinstaller-4.8 - Jairo Alves

1

很不幸,Anaconda上的PyQt5模块出了问题,缺少一些其他模块可能需要的文件,例如PySimpleGui。最简单的解决方案是创建一个全新的环境,在Anaconda中这非常容易,并使用pip安装pyqt5。这应该可以解决任何问题。同时安装其余的软件包,您就可以开始使用了!


0

我也遇到了同样的问题。pip安装PyQt5出错了... Pyinstaller团队需要一些严肃的帮助。我回退到之前在我的系统上工作的Pyinstaller版本。

Traceback (most recent call last):
  File "c:\progra~1\anacon~1\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\progra~1\anacon~1\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\PROGRA~1\Anaconda3\Scripts\pyinstaller.exe\__main__.py", line 9, in <module>
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\__main__.py", line 126, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\__main__.py", line 65, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\building\build_main.py", line 815, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\building\build_main.py", line 762, in build
    exec(code, spec_namespace)
  File ".\tibcoAtlassian.spec", line 17, in <module>
    noarchive=False)
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\building\build_main.py", line 294, in __init__
    self.__postinit__()
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\building\datastruct.py", line 159, in __postinit__
    self.assemble()
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\building\build_main.py", line 473, in assemble
    self.graph.process_post_graph_hooks(self)
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\depend\analysis.py", line 373, in process_post_graph_hooks
    module_hook.post_graph(analysis)
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\depend\imphook.py", line 451, in post_graph
    self._load_hook_module()
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\depend\imphook.py", line 409, in _load_hook_module
    self.hook_module_name, self.hook_filename)
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\compat.py", line 632, in importlib_load_source
    return mod_loader.load_module()
  File "<frozen importlib._bootstrap_external>", line 407, in _check_name_wrapper
  File "<frozen importlib._bootstrap_external>", line 907, in load_module
  File "<frozen importlib._bootstrap_external>", line 732, in load_module
  File "<frozen importlib._bootstrap>", line 265, in _load_module_shim
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\hooks\hook-PyQt5.py", line 11, in <module>
    from PyInstaller.utils.hooks.qt import pyqt5_library_info, \
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 162, in <module>
    pyqt5_library_info = QtLibraryInfo('PyQt5')
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 54, in __init__
    if hooks.is_module_satisfies("PyQt5 >= 5.15.4"):
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 502, in is_module_satisfies
    version = get_module_attribute(module_name, version_attr)
  File "c:\progra~1\anacon~1\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 353, in get_module_attribute
    'Module %r has no attribute %r' % (module_name, attr_name))
AttributeError: Module 'PyQt5' has no attribute '__version__'

这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Karl Wilhelm

-1
我找到了解决方法。当你用auto-py-to-exe将.py文件转换成.exe文件时,你需要点击“高级”然后添加“hidden-imports”,在这里你需要添加你在.py文件中导入的内容,例如,我的.py文件导入了“sounddevice”、“numpy”和“os”,因此我把所有这些都加入到了“hidden-imports”中,在auto-py-to-exe中。希望这可以帮到你 - 这里有一张图片:example

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接