python - 无法使用 PyInstaller 可执行文件导入 Geopandas - 尽管在虚拟环境中运行良好
问题描述
当我使用 PyInstaller 冻结的 Python 应用程序尝试导入 Geopandas 时,它停止工作。
- 视窗 10
- PyInstaller 3.3.1
- 地理熊猫 0.4
这是源代码:
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 相当陌生,因此将不胜感激。
解决方案
我收到了同样的错误,并以与上面的 aorr 不同的方式解决了它。
该错误是因为 pyinstaller 找不到包中包含的 geopandas 数据集,因为它们是 .shp 文件。
我没有在我的项目中使用 geopandas 数据集,所以我没有手动将它们包含在我的 .spec 文件中,而是将以下import geopandas.datasets
语句注释掉:File "site-packages\geopandas\__init__.py", line 9, in <module>
。
这正确编译并为我的程序提供了预期的输出。
推荐阅读
- node.js - 尝试加入两个文档时无法在 Mongoose 中填充路径
- android - 如何使用 QtNfc 从 Android 上的 Mifare 1k 获取 SAK?
- asa - 如何在 15 秒后自动运行来自 cisco ASA 5520 的 cli 命令
- java - 如何将 jwt.io Java 库导入 JMeter
- java - 有没有办法在没有 EAR 的情况下用 WAR 打包 EJB 模块?
- prometheus - 在 Prometheus 中添加不同标签的查询
- next.js - 获取静态页面的侧边栏链接
- javascript - 仅使用密码设置 Firebase 身份验证
- c# - Xamarin Forms Android 出 java.lang.OutOfMemoryError 异常
- android - 使用下载管理器完成下载时通知的最佳方式是什么?