首页 > 解决方案 > 无法使用 PyInstaller 可执行文件导入 Geopandas - 尽管在虚拟环境中运行良好

问题描述

当我使用 PyInstaller 冻结的 Python 应用程序尝试导入 Geopandas 时,它停止工作。

这是源代码:

print("Hello, StackOverflow")
import geopandas as gpd

这是编译的 EXE 的结果控制台输出:

Hello, StackOverflow
Traceback (most recent call last):
  File "application.py", line 3, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "d:\documents\projecttwo\publish\harv_venv1\env\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\geopandas\__init__.py", line 9, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "d:\documents\projecttwo\publish\harv_venv1\env\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\geopandas\datasets\__init__.py", line 7, in <module>
StopIteration
[6764] Failed to execute script application

当我尝试导入 Geopandas 是更复杂的应用程序时,这种行为是一致的,并且控制台输出是恒定的。

Geopandas 已在 Python 3.6.3 虚拟环境中正确安装(通过 PIP,我也尝试过 0.4 和 0.3 版本),并且在编译之前运行良好(即python application.py成功运行)。

我尝试从不同的来源(例如 Gohlke 的轮子)安装 geopandas 和 pyinstaller,结果相同。我还尝试从头开始创建一个全新的虚拟环境,从 Gohlke 安装 Fiona,从 pip 安装 geopandas。

我怀疑可能需要进行一些隐藏的导入。我对 PyInstaller 相当陌生,因此将不胜感激。

标签: pythonpyinstallergeopandas

解决方案


我收到了同样的错误,并以与上面的 aorr 不同的方式解决了它。

该错误是因为 pyinstaller 找不到包中包含的 geopandas 数据集,因为它们是 .shp 文件。

我没有在我的项目中使用 geopandas 数据集,所以我没有手动将它们包含在我的 .spec 文件中,而是将以下import geopandas.datasets语句注释掉:File "site-packages\geopandas\__init__.py", line 9, in <module>

这正确编译并为我的程序提供了预期的输出。


推荐阅读