- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试使用 zipfile
提取 ZIP 文件时遇到了一个奇怪的段错误错误。导入 osgeo.gdal
的模块模块(并非唯一,osgeo.ogr
产生相同的错误——也许它与使用 SWIG 的两个模块有关?)。
我能够将崩溃缩小到 osgeo.gdal
的特定导入,请参见下面的示例。使用 GDB 运行 Python 解释器似乎表明崩溃源于无效的 free()
。在 zlib 中的某个地方调用,但不幸的是我缺乏在那里进一步挖掘的经验。
有人猜测这里可能出了什么问题吗?或者也许一些关于如何最好地调试这样的问题的指针(呵呵)?
万分感谢!
编辑:经过更多调查,我发现针对 Conda 提供的 GDAL 包( https://github.com/conda-forge/gdal-feedstock/issues/365 )报告了类似的问题。将 GDAL 模块导入移动到导入列表末尾的建议解决方法修复了段错误,就是这样!不过,我很感激任何可以为我指明调试此类问题的正确方向的答案:)
违规代码,(几乎)最小的例子
# >>> Comment this import to make the segfault disappear
from osgeo import gdal
# <<<
import io
import tempfile
import zipfile
import urllib3
import faulthandler
class GadmDownloader:
BASE_URL_TEMPLATE = 'https://biogeo.ucdavis.edu/data/gadm3.6/gpkg/gadm36_{}_gpkg.zip'
def __init__(self):
self.http = urllib3.PoolManager()
def download_country(self, country, output_dir = None):
url = self.BASE_URL_TEMPLATE.format(country.upper())
resp: urllib3.HTTPResponse = self.http.request('GET', url)
if resp.status != 200:
raise RuntimeError(f'Download failed: {resp.status}')
faulthandler.enable()
with zipfile.ZipFile(io.BytesIO(resp.data), 'r') as zipf:
gpkg = [name for name in zipf.namelist()
if name.endswith('.gpkg')]
zipf.extract(gpkg[0], output_dir)
return gpkg[0]
def main():
gdal.UseExceptions()
dl = GadmDownloader()
with tempfile.TemporaryDirectory() as tempdir:
path = dl.download_country('gmb', tempdir)
print(f'>> Path: {path}')
if __name__ == "__main__":
main()
输出
$ python -X dev gadm.py (minikube:default)
/usr/lib/python3.8/site-packages/osgeo/__init__.py:15: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
Fatal Python error: Segmentation fault
Current thread 0x00007ffb15579740 (most recent call first):
File "/usr/lib/python3.8/zipfile.py", line 724 in _get_decompressor
File "/usr/lib/python3.8/zipfile.py", line 819 in __init__
File "/usr/lib/python3.8/zipfile.py", line 1571 in open
File "/usr/lib/python3.8/zipfile.py", line 1700 in _extract_member
File "/usr/lib/python3.8/zipfile.py", line 1630 in extract
File "gadm.py", line 29 in download_country
File "gadm.py", line 38 in main
File "gadm.py", line 42 in <module>
[1] 200128 segmentation fault (core dumped) python -X dev -d -X showmalloc gadm.py
GDB 回溯
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7e3aa50 in free () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007ffff7e3aa50 in free () from /usr/lib/libc.so.6
#1 0x00007ffff485ae0f in inflateReset2 () from /usr/lib/libcfitsio.so.9
#2 0x00007ffff39ec1a4 in inflateInit2_ () from /usr/lib/libz.so.1
#3 0x00007ffff74a7880 in ?? () from /usr/lib/python3.8/lib-dynload/zlib.cpython-38-x86_64-linux-gnu.so
#4 0x00007ffff7b466ad in ?? () from /usr/lib/libpython3.8.so.1.0
#5 0x00007ffff7b43097 in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#6 0x00007ffff7b4f138 in _PyFunction_Vectorcall () from /usr/lib/libpython3.8.so.1.0
#7 0x00007ffff7b3e77c in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#8 0x00007ffff7b3d0c4 in _PyEval_EvalCodeWithName () from /usr/lib/libpython3.8.so.1.0
#9 0x00007ffff7b47095 in _PyObject_FastCallDict () from /usr/lib/libpython3.8.so.1.0
#10 0x00007ffff7b59c2f in ?? () from /usr/lib/libpython3.8.so.1.0
#11 0x00007ffff7b47c90 in _PyObject_MakeTpCall () from /usr/lib/libpython3.8.so.1.0
#12 0x00007ffff7b42fc4 in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#13 0x00007ffff7b3d7e2 in _PyEval_EvalCodeWithName () from /usr/lib/libpython3.8.so.1.0
#14 0x00007ffff7b5e982 in ?? () from /usr/lib/libpython3.8.so.1.0
#15 0x00007ffff7b3f553 in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#16 0x00007ffff7b3d7e2 in _PyEval_EvalCodeWithName () from /usr/lib/libpython3.8.so.1.0
#17 0x00007ffff7b4f1cd in _PyFunction_Vectorcall () from /usr/lib/libpython3.8.so.1.0
#18 0x00007ffff7b3eb41 in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#19 0x00007ffff7b3d0c4 in _PyEval_EvalCodeWithName () from /usr/lib/libpython3.8.so.1.0
#20 0x00007ffff7b4f1cd in _PyFunction_Vectorcall () from /usr/lib/libpython3.8.so.1.0
#21 0x00007ffff7b3eb41 in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#22 0x00007ffff7b3d0c4 in _PyEval_EvalCodeWithName () from /usr/lib/libpython3.8.so.1.0
#23 0x00007ffff7b4f1cd in _PyFunction_Vectorcall () from /usr/lib/libpython3.8.so.1.0
#24 0x00007ffff7b3eb41 in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#25 0x00007ffff7b4f138 in _PyFunction_Vectorcall () from /usr/lib/libpython3.8.so.1.0
#26 0x00007ffff7b3e77c in _PyEval_EvalFrameDefault () from /usr/lib/libpython3.8.so.1.0
#27 0x00007ffff7b3d0c4 in _PyEval_EvalCodeWithName () from /usr/lib/libpython3.8.so.1.0
#28 0x00007ffff7bee323 in PyEval_EvalCode () from /usr/lib/libpython3.8.so.1.0
#29 0x00007ffff7bf9b98 in ?? () from /usr/lib/libpython3.8.so.1.0
#30 0x00007ffff7bf3db3 in ?? () from /usr/lib/libpython3.8.so.1.0
#31 0x00007ffff7ab2a0b in PyRun_FileExFlags () from /usr/lib/libpython3.8.so.1.0
#32 0x00007ffff7ab2482 in PyRun_SimpleFileExFlags () from /usr/lib/libpython3.8.so.1.0
#33 0x00007ffff7c06a1a in Py_RunMain () from /usr/lib/libpython3.8.so.1.0
#34 0x00007ffff7be2bd9 in Py_BytesMain () from /usr/lib/libpython3.8.so.1.0
#35 0x00007ffff7dd6002 in __libc_start_main () from /usr/lib/libc.so.6
#36 0x000055555555504e in _start ()
系统事实
最佳答案
以相反的字母顺序执行 Python 导入解决了这个问题。
关于在加载 GDAL 包时使用 zipfile 时出现 Python 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63161532/
谁能帮我提供SetGeoTransform的参数?我正在使用GDAL创建栅格图层,但是找不到SetGeoTransform的第3和第5参数的描述。它应该是单元格的x和y轴的定义。我尝试找到有关here
自从 ECW(Hexagon Geospatial/Intergraph)最近发布了具有重大更改(5.0、5.1 和 5.2)的新版本以来,大多数(全部?)在线信息已经过时。 大多数指令会导致如下错误
我有一台带有 M1 芯片的 macbook,我正在尝试建立一个 django 项目。该项目与地理空间库 gdal 一起工作。我在 3.3.1_3 版和我的虚拟环境 3.3.1 版中安装了带有 Home
我有一台带有 M1 芯片的 macbook,我正在尝试建立一个 django 项目。该项目与地理空间库 gdal 一起工作。我在 3.3.1_3 版和我的虚拟环境 3.3.1 版中安装了带有 Home
我有几个 tif 格式的文件。我想将它们翻译成 ENVI 格式。我对一个文件成功了,但我想对目录中的其余文件执行此操作。 the first file in the directory is:S
我有几个 tif 格式的文件。我想将它们翻译成 ENVI 格式。我对一个文件成功了,但我想对目录中的其余文件执行此操作。 the first file in the directory is:S
我搜索了全网都没有找到指南获取gdal-config . 我有 yum 但 yum 没有 gdal-config , 我已经安装了 gdal . 我只需要能够在 shell 上执行此操作 - gdal
我有一个很大的 GeoTIFF,我想通过 GeoServer (v.2.11) 中的 WMS 进行流式传输。图像大小约为 7GB,由非常大的高分辨率 RGB 图像组成。我已经在 JVM 中留出了足
我有一个仅存在于内存中的 GDAL 数据集 (inmem_ds): In: gdal.Info(inmem_ds) Out: ('Driver: NUMPY/Numeric Python Array\
我正在尝试在基于各种 solutions 的虚拟环境中安装 GDAL在那里。 但是下载本身已经失败了: $ pip install --no-install GDAL 这是 pip.log -----
您好,我正在尝试迭代栅格数据集 (band1) 的值。我可以使用以下代码片段在 python 中完成此操作(抱歉,我无法提供原始栅格) import numpy as np import gdal p
有人知道如何使用 GDAL 更改或设置 GeoTIFF 文件的“描述”选项/标签吗? 为了说明我的意思,这是从带有设置“描述”的 GeoTIFF 文件返回的 gdalinfo 示例: Band 1
请指出我遗漏的一点: openSUSE 11.3 xx@linux-y3pi:~/Desktop/R> sudo R CMD INSTALL rgdal_0.7-12.tar.gz root's pa
在尝试安装 sf R 包,我收到错误消息: checking GDAL version >= 2.0.0... no configure: error: sf is not compatible wi
我使用 gdal 创建不同类型的图层,例如颜色浮雕和山体阴影,并使用 Mapnik 将它们组合成单个图像,以用作从单个 .hgt 文件获得的 3D dem 模型的纹理。 假设我是 gdal 新手,我在
鉴于此文件: http://mtarchive.geol.iastate.edu/2019/02/18/mrms/ncep/GaugeCorr_QPE_01H/GaugeCorr_QPE_01H_00
您好,我是Gdal的新手,正在为我的代码苦苦挣扎。在我的代码中,一切似乎进展顺利,但最后的输出区域为空。当我指定255时,无数据值设置为256,所以我真的不知道出了什么问题。谢谢任何帮助,将不胜感激!
我正在尝试构建马赛克,我依靠 NoDataValue 功能将图像的某些部分视为透明。但是,GDAL 似乎没有按预期工作。 我还使用 vrt 数据集和 gdal_translate 创建了一个非常简单的
他们的文档简单而专业。 但他们并没有过多提及这些开源项目之间的关系。 我应该什么时候使用哪一种?哪一个适合什么场景? 如果您是熟悉这些项目的GIS开发人员,您能解释一下吗? 最佳答案 基本上,GDAL
我正在使用 GDAL java API。我有一段代码可以将 SRTM (hgt)、geotiff 和 dted 文件相互转换。 在测试代码时,我成功地将示例 hgt 文件(从互联网下载,例如从此站点:
我是一名优秀的程序员,十分优秀!