我使用 qgis 编写 python 脚本来显示谷歌地图基础层,并设置环境变量如下:
PYTHONHOME=C:\Program Files\QGIS 3.16\apps\Python37
PYTHONPATH=C:\Program Files\QGIS 3.16\apps\Python37; C:\Program Files\QGIS
3.16\apps\Python37\Scripts\; C:\Program Files\QGIS 3.16\apps\Python37\Lib\; C:\Program
Files\QGIS 3.16\apps\Python37\Lib\site-packages\; C:\Program Files\QGIS
3.16\apps\Python37\DLLs\; C:\Program Files\QGIS 3.16\apps\qgis-ltr\python\
Path= %PATH%; C:\Program Files\QGIS 3.16\bin\; C:\Program Files\QGIS 3.16\apps\qgis-ltr\bin\;
C:\Program Files\QGIS 3.16\apps\Qt5\bin\; C:\Program Files\QGIS 3.16\apps\Python37\;
C:\Program Files\QGIS 3.16\apps\Python37\Lib\; C:\Program Files\QGIS
3.16\apps\Python37\Scripts\; C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-packages\
使用 vs 2019 运行脚本时,它成功显示了地图,但是当我使用 pyinstaller 转换为 exe 文件时,它显示错误:找不到现有的 PyQt5 插件目录这是 pyinstaller 跟踪:
17399 DEBUG: add_qt5_dependencies: raw lib C:\WINDOWS\system32\SHELL32.dll -> parsed lib
shell32
17403 DEBUG: add_qt5_dependencies: raw lib C:\Program Files\Java\jdk-14.0.1\bin\api-ms-win-
crt-environment-l1-1-0.dll -> parsed lib api-ms-win-crt-environment-l1-1-0
Traceback (most recent call last):
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Program Files\QGIS 3.16\apps\Python37\Scripts\pyinstaller.exe\__main__.py", line 7,
in <module>
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-packages\PyInstaller\__main__.py",
line 124, in run
run_build(pyi_config, spec_file, **vars(args))
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-packages\PyInstaller\__main__.py",
line 58, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\building\build_main.py", line 782, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\building\build_main.py", line 714, in build
exec(code, spec_namespace)
File "D:\MY_WORK\PythonProjects\MyHelloWorld\myapp.spec", line 19, in <module>
noarchive=False)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\building\build_main.py", line 277, in __init__
self.__postinit__()
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\building\datastruct.py", line 155, in __postinit__
self.assemble()
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\building\build_main.py", line 445, in assemble
self.graph.process_post_graph_hooks(self)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\depend\analysis.py", line 326, in process_post_graph_hooks
module_hook.post_graph(analysis)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\depend\imphook.py", line 398, in post_graph
self._load_hook_module()
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\depend\imphook.py", line 361, in _load_hook_module
self._hook_module = importlib_load_source(self.hook_module_name, self.hook_filename)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-packages\PyInstaller\compat.py", line
606, 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:\Program Files\QGIS 3.16\apps\Python37\Lib\site-packages\PyInstaller\hooks\hook-
PyQt5.QtWidgets.py", line 14, in <module>
hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\utils\hooks\qt.py", line 536, in add_qt_dependencies
more_binaries = qt_plugins_binaries(plugin, namespace=namespace)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\utils\hooks\qt.py", line 232, in qt_plugins_binaries
pdir = qt_plugins_dir(namespace)
File "C:\Program Files\QGIS 3.16\apps\Python37\Lib\site-
packages\PyInstaller\utils\hooks\qt.py", line 196, in qt_plugins_dir
"Cannot find existing {0} plugin directories. Paths checked: {1}".format(namespace, ",
".join(paths))
Exception: Cannot find existing PyQt5 plugin directories. Paths checked: