gpt4 book ai didi

build - Pyinstaller - 从 os.system (gdal_translate) 调用 GDAL

转载 作者:行者123 更新时间:2023-12-05 07:53:11 24 4
gpt4 key购买 nike

各位学友大家好。在 Windows 7 上运行 32 位 Python2.7。

我有一个关于在 pyinstaller 构建中包含 GDAL 可执行文件的问题。我正在进行系统调用以从 FWTools 版本运行两个 GDAL 函数。这些函数位于 Windows C:\Program Files (x86)\FWTools2.4.7\bin 的 PATH 变量中,因此它在 Python27 环境中运行良好。但是,此路径不会延续到 pyinstaller 构建。

有问题的代码调用 GDAL 函数将图像重新转换为不同的地理空间坐标。

os.system("gdal_translate -of GTiff -a_ullr  694440.7939 6403967.2406  696438.7261 6404791.6774 -a_srs EPSG:28355 site.tif siteGR.tif")

os.system("gdalinfo siteGR.tif")

运行时运行良好,直到遇到上述行然后返回以下错误:

'gdal_translate' is not recognized as an internal or external command,
operable program or batch file.

'gdalinfo' is not recognized as an internal or external command,
operable program or batch file.

我曾尝试将 gdal_translate.exe 和 gdalinfo.exe 作为二进制文件包含在构建文件夹中,就像您对 .dll 所做的那样,但是由于脚本运行后它失败了,我不认为它指的是他们。

我在下面包含了规范文件。我可以使用一些关于如何获取 pyinstaller 构建以识别在 python 脚本中从系统运行的可执行文件的建议。

规范:

# -*- mode: python -*-

a = Analysis(['gis_helper.py'],
pathex=['C:\\Users\\Hp\\PycharmProjects\\GISdev'],
hiddenimports=['scipy.linalg.cython_blas', 'scipy.linalg.cython_lapack', 'scipy.special._ufuncs_cxx', 'ctypes.util', 'pandas.util', 'distutils.util', 'shapely', '_socket', '_proj', 'multiprocessing', '_multiprocessing', 'multiprocessing.process', 'multiprocessing.util'],
hookspath=['C:\\Python27\\Lib\\site-packages\\PyInstaller\\hooks'],
runtime_hooks=None)


a.binaries1=['geos_c.dll', 'geos_c.dll', 'BINARY'],
a.binaries2=['python27.dll', 'python27.dll', 'BINARY'],
a.binaries3=['_socket.pyd', '_socket.pyd', 'BINARY'],
a.binaries4=['win32api.pyd', 'win32api.pyd', 'BINARY'],
a.binaries5=['pywintypes27.dll', 'pywintypes27.dll', 'BINARY'],
a.binaries6=['pythoncom27.dll', 'pythoncom27.dll', 'BINARY'],
a.binaries7=['_imaging.pyd', '_imaging.pyd', 'BINARY'],
a.binaries8=['_fblas.pyd', '_fblas.pyd', 'BINARY'],
a.binaries9=['gdal_translate.exe', 'gdal_translate.exe', 'BINARY'],
a.binaries10=['gdalinfo.exe', 'gdalinfo.exe', 'BINARY'],

import mpl_toolkits.basemap
import os

src_basedata = os.path.join(mpl_toolkits.basemap.__path__[0], "data")
tgt_basedata = os.path.join('mpl_toolkits', 'basemap', 'data')

pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
[('v',None,'OPTION')],
a.binaries, # This needs to be included
a.binaries1,
a.binaries2,
a.binaries3,
a.binaries4,
a.binaries5,
a.binaries6,
a.binaries7,
a.binaries8,
a.binaries9,
a.binaries10,
a.zipfiles,
a.datas + Tree(src_basedata, prefix=tgt_basedata),
name='gis_helper.exe',
debug=True,
strip=None,
upx=True,
console=True )

最佳答案

从 GDAL 2.1 开始,您可以在 python 绑定(bind)中使用 gdal_translate 的“librified”版本,这可能更健壮并且可以防止您不得不处理路径:

import gdal
gdal.Translate(<options>)

可以在 gdal 存储库的测试套件中找到它的一些使用示例: https://svn.osgeo.org/gdal/trunk/autotest/utilities/test_gdal_translate_lib.py

您可以pip install gdal,我相信它是 2.1 版本(在 linux 上)。对于 Windows,最简单的安装方法是使用 conda

这应该可以防止您在 pyinstaller 中过多地包含二进制文件/路径,因为它可以像任何 python 模块一样对待

关于build - Pyinstaller - 从 os.system (gdal_translate) 调用 GDAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32931976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com