【发布时间】:2014-09-25 09:36:55
【问题描述】:
我正在尝试冻结一个包含从 osgeo 导入的 Python 脚本,但可执行文件失败并显示 ImportError: No module named '_gdal'。
我已将我的脚本精简为一行:
import osgeo
在 Python(版本 3.3.3)中运行时一切正常。我试过用 cx_Freeze 和 py2exe 冻结。两者都报告缺少模块:? _gdal imported from osgeo(以及其他)但成功冻结了脚本。然后 exe 因上述 ImportError 而失败。
我尝试在 python 中导入 _gdal 并且它有效。我尝试在冻结选项中手动包含 osgeo 模块,但仍然出现相同的错误。
这里有一个类似的问题: Importing GDAL with cx_Freeze, Python3.4 但也许这不是 cx_freeze 问题,因为它也发生在 py2exe 上(它现在对 python 3 有实验性支持)。
有人知道如何解决这个问题吗?
【问题讨论】:
-
同样的问题,我问了最后一个有这个问题的人:如果你在 Python 提示符中输入
import _gdal然后print(_gdal),它会显示什么? -
@ThomasK 导入
_gdal失败,除非我先导入osgeo。在我这样做之后,print(_gdal)打印:<module '_gdal' from 'C:\\Python33\\lib\\site-packages\\osgeo\\_gdal.pyd'> -
哦,swig 正在做有趣的事情。尝试进入
C:\Python33\lib\site-packages\osgeo\__init__.py并将第13 行(ish)从import _gdal编辑为from . import _gdal,然后再次冻结。这是我建议您更改的文件:gist.github.com/takluyver/ac036f733c6f79342780
标签: python py2exe cx-freeze gdal