我正在尝试冻结包含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的实验性支持)。
有人知道如何解决这个问题吗?
答案 0 :(得分:1)
我找到了解决办法。我编辑了osgeo\__init__.py
文件并修改了第13行,如下所示:import osgeo._gdal
。这有效,但只有在冻结时手动包含模块osgeo._gdal。 @Thomas K你的解决方案也是如此。
请注意,如果需要,osgeo.ogr
(第18行)和osgeo.osr
(第18行)模块必须同时应用相同的修改(分别为import osgeo._ogr
和import osgeo._osr
)。这意味着在冷冻时也必须手动包含这些。我的冻结命令现在看起来像这样:python cxfreeze.py module1.py --include-modules=osgeo._gdal,osgeo._ogr,osgeo._osr
。
感谢@Thomas K的帮助。