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

2024-05-26

问候学识渊博的同学们。在 Windows 7 上运行 32 位 Python2.7。

我有一个关于在 pyinstaller 构建中包含 GDAL 可执行文件的问题。我正在进行系统调用来运行 FWTools 版本中的两个 GDAL 函数。这些函数位于 Windows 的 PATH 变量中C:\Program Files (x86)\FWTools2.4.7\bin因此它在 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 脚本中从系统运行的可执行文件的建议。

Spec:

# -*- 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 开始,您可以使用“librified”版本gdal_translate在 python 绑定中,这可能更健壮,并且可以防止您不得不处理路径:

import gdal
gdal.Translate(<options>)

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

You can pip install gdal我相信这是 2.1 版本(在 Linux 上)。对于 Windows,最简单的安装方法是conda.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyinstaller - 从 os.system 调用 GDAL (gdal_translate) 的相关文章

随机推荐

  • 某些数据结构是否比其他数据结构更适合函数式编程?

    In 现实世界哈斯克尔 http book realworldhaskell org 有一个标题为 没有数组或哈希表的生活 的部分 其中作者建议在函数式编程中首选列表和树 而在命令式程序中可能会使用数组或哈希表 这是有道理的 因为在创建新列
  • 使用 _POSIX_C_SOURCE 2 的 Clang 未知类型名称“siginfo_t”,为什么?

    Update结果我的讲师会接受按照 GNU99 标准编写的代码 因此 正如 User1 指出的那样 我使用了 GNU SOURCE在我的节目开始时 看man feature test macros了解更多信息 感谢您帮助我理解 在带有 Cl
  • 使用 SpreadsheetLight 进行行计数

    我正在寻找一个类似于 DataTable Rows Count 的函数 它可以与 SLDocument 一起使用来找出有多少行中有数据 SpreadsheetLight 中有可用的东西吗 还有其他方法可以实现这一目标吗 Brendan SL
  • 单击任何 EditText 时屏幕向上滚动

    我有一个屏幕 有 4 个编辑文本 如菜单名称 菜肴名称 标签和价格 我需要在单击它时将我的标签 Edittext 设置为顶部 56dip 现在一切正常 当我单击标签 EditText 时 它会像我想要的那样向上移动 我卡在哪里 向上移动布局
  • Bootstrap 切换导航项在单击后保持打开状态

    我有简单的 Bootstrap 3 切换导航 ul class nav navmenu nav clearfix li class navmenu brand dropdown clearfix a href class dropdown
  • 发布包含下划线 (_) 的 url

    我发布的 url 参数包含下划线 sample http sdsdsds asasasahjhd com dsdsdsd login json 我这样发布 HttpClient httpclient new DefaultHttpClien
  • 高负载应用程序的数据库可扩展性?

    我见过一些应用程序拥有集群 Web 服务器 例如 10 到 20 个服务器 以具有可扩展性 可以在其中分发 在网络服务器之间加载 但我总是看到所有网络服务器都使用单个数据库 现在考虑任何电子商务或铁路 Web 应用程序 其中有数百万用户在任
  • json.Unmarshal json字符串到对象是空结果[重复]

    这个问题在这里已经有答案了 我有一个非常简单的程序 如下所示 package main import encoding json fmt type RunCommand struct level string json level call
  • 如何在 Android 上重复使用 AlertDialog 来表示是/否?

    我正在尝试找到重用显示自定义标题的对话框的方法 然后将 是 否 单击发送到启动该对话框的函数 我有两个按钮 保存 和 关闭 两者都调用 是 否 对话框 一个显示 您要保存 另一个显示 关闭更改吗 我认为我的程序非常 脏 但我想它可以工作 但
  • 如何在 C# 中重构 log4net 语句?

    好吧 读完丹本对此的回答后post https stackoverflow com questions 2230180 whats log4j actually doing when we turn on or off some log p
  • 在 foreach 循环中启动一个新线程

    我有一个对象列表 我想循环该列表并启动一个新线程 传入当前对象 我写了一个我认为应该这样做的例子 但它不起作用 具体来说 线程似乎在每次迭代中都被覆盖 但这对我来说并没有什么意义 因为我每次都会创建一个新的 Thread 对象 这是我写的测
  • jquery addClass() 不适用于 event.target

    请帮忙 为什么是jqueryaddClass 不与event target 我已经编写了一个代码 它应该在单击时在目标上添加类 但它不起作用 它说 e target addClass不是一个函数 http jsfiddle net Lq9G
  • Final 是否意味着覆盖?

    据我了解 override关键字表明给定的声明实现了一个基类virtual方法 如果没有找到匹配的基方法 编译就会失败 我的理解final关键字是它告诉编译器任何类都不能重写它virtual功能 So is override final多余
  • WPF DataGrid 显示点而不是逗号

    在网上查找并寻找答案后没有结果 我想向您寻求帮助 我有一个包含 2 列的 SQL 数据库表 浮点数据类型 例如 1 2 1 3 1 4 等 绑定到一个DataGrid XAML 代码
  • 随机化数组元素

    我有一个数组 number 1 2 3 4 5 6 7 8 9 现在 我想随机化数组内容 例如 5 3 2 6 7 1 8 请指导我如何继续 Use the shuffle方法 irb main 001 0 gt 1 2 3 4 5 shu
  • 在具有循环依赖关系的大型对象上调用 JSON.stringify 时出现“太多递归”错误

    我有一个包含循环引用的对象 我想查看它的 JSON 表示形式 例如 如果我构建这个对象 var myObject member myObject member child myObject member child parent myObj
  • Entity Framework 6 Code First 迁移 - 用于生产的多个分支

    在我的项目中 我们有一个分支模型 它有一个单独的开发分支 并且每个版本都有一个单独的分支 它可能看起来像这样 dev master r1 r2 因此 我们在 dev 上开发并将其合并到 master 然后创建一个发布分支 r1 r2 我们想
  • ng-repeat 插入空锚标记

    我正在尝试使用角度创建一个菜单 菜单项可以有子项 需要另一个 ng repeat 来打印子导航项 当尝试在第二个 ng repeat 中插入锚标记时 我注意到一些奇怪的行为 小提琴链接 http jsfiddle net npU7t htt
  • 有什么有效的方法可以将 XImage 数据转换为像素图(例如 RGB 四边形数组)?

    我正在尝试使用 XGetImage 捕获图像 一切都很好 但我需要将数据发送到需要 RGB 四边形数组的模块 对图像中的每个像素调用 XGetPixel 非常慢 在 i5 上 1440x900 分辨率为 0 5 秒 我在xlib中查找了XG
  • Pyinstaller - 从 os.system 调用 GDAL (gdal_translate)

    问候学识渊博的同学们 在 Windows 7 上运行 32 位 Python2 7 我有一个关于在 pyinstaller 构建中包含 GDAL 可执行文件的问题 我正在进行系统调用来运行 FWTools 版本中的两个 GDAL 函数 这些