问候学者们。在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所做的那样,但是因为它在脚本运行后失败了,所以我不认为它指的是他们。
我在下面列出了spec文件。我可以使用一些建议来了解如何让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 )
答案 0 :(得分:0)
从GDAL 2.1您可以使用' librified' python绑定中的gdal_translate
版本,它可能更强大,并且可以防止您不得不使用路径:
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模块