Python 3.4 在生成一些(但不是全部)带有分段错误 11 的 Cartopy 地图时崩溃

2023-11-29

我已经在运行 El Capitan 10.11.6 和 Python 3.4 的 Mac 上安装了 Python 映射工具 Cartopy。我可以使用 Cartopy 成功绘制一些地图,但在某些情况下,Python 内核会因分段错误 11 而终止。

我想要一个可以在需要时轻松从计算机中删除的设置。因此,我使用 fink 安装了 Python 3.4 和必要的依赖项:

$ fink install python34
$ fink install gdal2
$ fink install gdal2-dev
$ fink install proj
$ fink install libproj9

然后我使用 pyvenv 创建了一个虚拟环境(但也尝试了 virtualenv 和 venv)并激活了它。

在激活的虚拟环境中,我使用pip安装:

$ pip install cython        # Successfully installed cython-0.25.2
$ pip install numpy         # Successfully installed numpy-1.12.1
$ pip install shapely       # Successfully installed shapely-1.5.17.post1
$ pip install pyshp         # Successfully installed pyshp-1.2.10
$ pip install pandas        # Successfully installed pandas-0.19.2 python-dateutil-2.6.0 pytz-2017.2 six-1.10.0
$ pip install matplotlib    # Successfully installed cycler-0.10.0 matplotlib-2.0.0 pyparsing-2.2.0
$ pip install pillow        # Successfully installed olefile-0.44 pillow-4.1.0
$ pip install pyepsg        # Successfully installed pyepsg-0.3.1
$ pip install scipy         # Successfully installed scipy-0.19.0
$ pip install OWSLib        # Successfully installed OWSLib-0.14.0 pyproj-1.9.5.1 requests-2.13.0
$ pip install mock          # Successfully installed mock-2.0.0 pbr-3.0.0
$ pip install nose          # Successfully installed nose-1.3.7
$ pip install pep8          # Successfully installed pep8-1.7.0
$ pip install jupyter       # Successfully installed MarkupSafe-1.0 appnope-0.1.0 backports-abc-0.5 bleach-2.0.0 decorator-4.0.11 entrypoints-0.2.2 html5lib-0.999999999 ipykernel-4.6.1 ipython-6.0.0 ipython-genutils-0.2.0 ipywidgets-6.0.0 jedi-0.10.2 jinja2-2.9.6 jsonschema-2.6.0 jupyter-1.0.0 jupyter-client-5.0.1 jupyter-console-5.1.0 jupyter-core-4.3.0 mistune-0.7.4 nbconvert-5.1.1 nbformat-4.3.0 notebook-5.0.0 pandocfilters-1.4.1 pexpect-4.2.1 pickleshare-0.7.4 prompt-toolkit-1.0.14 ptyprocess-0.5.1 pygments-2.2.0 pyzmq-16.0.2 qtconsole-4.3.0 simplegeneric-0.8.1 terminado-0.6 testpath-0.3 tornado-4.5.1 traitlets-4.3.2 typing-3.6.1 wcwidth-0.1.7 webencodings-0.5.1 widgetsnbextension-2.0.0

以上似乎满足了列出的所有 Cartopy 依赖要求:http://scitools.org.uk/cartopy/docs/v0.15/installing.html

然后我安装了 Cartopy,确保针对(如果这是正确的术语)使用 fink 安装的 geos 库进行构建:

pip install --global-option=build_ext --global-option="-I/sw/opt/libgeos3.5.0/include" --global-option="-L/sw/opt/libgeos3.5.0/lib"  cartopy
                             # Successfully installed cartopy-0.14.2

我可以在 Jupyter 笔记本或终端中运行 Python,它允许我毫无错误地导入 Cartopy。我从 Cartopy 网站下载了一些示例代码来测试安装。

以下示例完美运行:

import matplotlib
matplotlib.use("TkAgg")
cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.Mollweide())
ax.stock_img()
plt.show()

就像这段代码一样:

import os
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt

from cartopy import config
import cartopy.crs as ccrs

fig = plt.figure(figsize=(8, 12))

# get the path of the file. It can be found in the repo data directory.
fname = os.path.join(config["repo_data_dir"],
                     'raster', 'sample', 'Miriam.A2012270.2050.2km.jpg'
                     )
img_extent = (-120.67660000000001, -106.32104523100001, 13.2301484511245, 30.766899999999502)
img = plt.imread(fname)

ax = plt.axes(projection=ccrs.PlateCarree())
plt.title('Hurricane Miriam from the Aqua/MODIS satellite\n'
          '2012 09/26/2012 20:50 UTC')

# set a margin around the data
ax.set_xmargin(0.05)
ax.set_ymargin(0.10)

# add the image. Because this image was a tif, the "origin" of the image is in the
# upper left corner
ax.imshow(img, origin='upper', extent=img_extent, transform=ccrs.PlateCarree())
ax.coastlines(resolution='50m', color='black', linewidth=1)

# mark a known place to help us geo-locate ourselves
ax.plot(-117.1625, 32.715, 'bo', markersize=7, transform=ccrs.Geodetic())
ax.text(-117, 33, 'San Diego', transform=ccrs.Geodetic())

plt.show()

但这段代码导致内核崩溃:

import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
import cartopy

ax = plt.axes(projection=cartopy.crs.PlateCarree())

ax.add_feature(cartopy.feature.LAND)
ax.add_feature(cartopy.feature.OCEAN)
ax.add_feature(cartopy.feature.COASTLINE)
ax.add_feature(cartopy.feature.BORDERS, linestyle=':')
ax.add_feature(cartopy.feature.LAKES, alpha=0.5)
ax.add_feature(cartopy.feature.RIVERS)

ax.set_extent([-20, 60, -40, 40])

plt.show()

当在终端中逐行输入代码时,所有行都很好,直到输入最后两行中的任何一行。

命令行产生的唯一错误消息是:

Segmentation fault: 11

有没有人遇到过这个问题的原因和解决方案?


最终取得了一些进展,所以我将总结我的解决方案。它可能无法解决所有问题,但它确实解决了我最初遇到的问题。

我在 Cartopy GitHub 页面上发布了一个问题 (https://github.com/SciTools/cartopy/issues/879)其中 QuLogic 建议使用以下方法重新安装 shapely 来阻止分段错误:

    pip uninstall shapely; pip install --no-binary :all: shapely

这确实阻止了分段错误 11,但运行“问题”代码会产生一个错误,表明无法找到 geos_c,即使它存在。确切的错误是:

OSError:找不到lib geos_c或加载其任何变体['/Library/Frameworks/GEOS.framework/Versions/Current/GEOS','/opt/local/lib/libgeos_c.dylib']。

似乎代码坚持在预定义位置查找该库,并拒绝查看 fink 安装该库的位置,即使我已将位置添加到 .bash_profile 文件中。解决方案是在该预定义位置创建一个指向 fink 安装库的符号链接。希望这是有道理的。 (参见杰斯·布朗宁,网址:安装Shapely时无法找到OSError geos_c).

因此,这里是我的整个解决方案的摘要,以防对其他人有所帮助。任何改进建议都将受到欢迎。

  1. 郑重声明,我的设置是在 iMac 上运行的 Mac OS 10.11.6 (El Capitan) 上的标准(非管理员)帐户。不过,如有必要,我也可以访问管理员帐户。

  2. 使用 python.org 提供的安装程序安装了 Python 3.6 版本

  3. 作为管理员,使用 fink 安装 gdal2、gdal2-dev、libproj9、libgeos3.6.1。 (还使用fink安装了python3.6、gdal-py36、freetype、freetype219、cairo、gsl、sqlite3和libspatialite7的版本,但不确定这些包是否是绝对必要的。)

  4. Python 3.6 安装在 /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 中。使用创建了一个虚拟环境(称为 venv36)-m venv如下:

在命令行:

    $ mkdir <name_of_directory_for_virtual_env>
    $ cd <name_of_directory_for_virtual_env>
    $ /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 -m venv venv36
  1. 在用户帐户中,使用 nano 编辑 .bash_profile 文件以包含 fink 安装 libgeos3.6.1 的位置的路径:

在命令行:

    $ cd
    $ nano .bash_profile

Added the following lines to the .bash_profile file and saved (ctrl-O):

    GEOS_CONFIG="/sw/opt/libgeos3.6.1/bin/geos-config"; export GEOS_CONFIG
    GEOS_DIR="/sw/opt/libgeos3.6.1"; export GEOS_DIR
  1. 激活虚拟环境并pip安装所需的软件包。 pandas 和 jupyter 软件包是可选的,但为什么您不想安装它们呢?

在命令行中:

    $ cd <path_to_virtual_environment>
    $ source venv36/bin/activate
    
    (venv36) $ pip install cython
    (venv36) $ pip install numpy
    (venv36) $ pip install --no-binary :all: shapely
    (venv36) $ pip install pyshp
    (venv36) $ pip install pyproj
    (venv36) $ pip install six
    (venv36) $ pip install matplotlib
    
    (venv36) $ export CPLUS_INCLUDE_PATH=/sw/include/gdal2/
    (venv36) $ export C_INCLUDE_PATH=/sw/include/gdal2/
    (venv36) $ pip install gdal
    (venv36) $ pip install pillow
    (venv36) $ pip install pyepsg
    (venv36) $ pip install scipy
    (venv36) $ pip install OWSLib
    (venv36) $ pip install mock nose pep8
    (venv36) $ pip install pandas
    (venv36) $ pip install jupyter
    
    (venv36) $ pip install --global-option=build_ext --global-option="-I/sw/opt/libgeos3.6.1/include" --global-option="-L/sw/opt/libgeos3.6.1/lib"  cartopy
  1. 最后,在 /opt/local/lib/ 中添加了一个符号链接(cartopy – 或其他一些软件包 – 坚持寻找 libgeos 的地方),该链接指向 fink 安装的 libgeos 库(称为 libgeos_c.1.dylib)。如果 /opt/local/lib 路径(或其中的一部分)尚不存在,则可能需要创建它。

然后,在命令行中:

    $ cd /opt/local/lib
    $ sudo ln -s /sw/opt/libgeos3.6.1/lib/libgeos_c.1.dylib libgeos_c.dylib

就是这样。在激活的虚拟环境中,打开jupyter-notebook。如果您希望在笔记本中绘制地图,请确保第一行包含以下内容:

%matplotlib inline

然后将以下内容添加到下一个单元格:

import cartopy
import matplotlib.pyplot as plt

ax = plt.axes(projection=cartopy.crs.PlateCarree())

ax.add_feature(cartopy.feature.LAND)
ax.add_feature(cartopy.feature.OCEAN)
ax.add_feature(cartopy.feature.COASTLINE)
ax.add_feature(cartopy.feature.BORDERS, linestyle=':')
ax.add_feature(cartopy.feature.LAKES, alpha=0.5)
ax.add_feature(cartopy.feature.RIVERS)

ax.set_extent([-20, 60, -40, 40])

plt.show()

当代码运行时,它可能会产生一个警告(Failed CDLL(/Library/Frameworks/GEOS.framework/Versions/Current/GEOS))但希望它仍然会产生以下图像:

Map produced by cartopy code

就是这样了。希望能帮助到你。任何改进意见或建议将不胜感激。

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

Python 3.4 在生成一些(但不是全部)带有分段错误 11 的 Cartopy 地图时崩溃 的相关文章

  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 绘制随时间变化的分类数据计数

    我有一个数据框 df 其中有一列包含分类数据 ETH 带有 DateTimeIndex 我想绘制类别counts随着时间的推移 它们按天索引 我最好按年绘制它们 df pd DataFrame County 0 Bexar 3 Nueces
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 如果两个可能条件中的任何一个成立,则 maven-antrun-plugin 跳过目标

    我可以通过以下方式将两个属性 A 和 B 传递给 maven mvn test DA true or mvn test DB true 如果定义了 A 或 B 我希望跳过目标 我发现当只考虑A时这是可能的
  • 删除Delphi中标签之间变量子字符串的所有实例

    我正在将 HTML 中的可读文本提取到字符串中 并且需要删除之间的现有文本标签 实现这一目标最有效的方法是什么 现在我正在这样做 function RemoveIEScripts const s string string var i In
  • 如何在 Linux Mint 上防止一致的 java 暂停模式

    我有一个在 Linux Mint 上运行的 Java 应用程序 每一分钟 程序都会显示出非常明显的减慢 暂停 停顿时间持续 3 到 4 秒 当我们运行同一程序的更多实例时 它们也会每分钟暂停 3 到 4 秒 每个节目在一分钟的不同秒停止 最
  • 通过 Google Apps 帐户通过 C# 发送电子邮件

    我有一个标准的 Google Apps 帐户 我已通过 Google Apps 设置了自定义域 当我使用 Gmail 界面时 我能够通过 Google Apps 成功发送和接收电子邮件 但是 我想通过代码发送电子邮件 为了尝试这个 我一直在
  • 运营转型库?

    我正在寻找一个库 它允许我在多个用户之间实时同步文本 ala Google Docs 我偶然发现了运营转型 它似乎符合我的需求 话虽如此 我了解 OT 的要点 但不了解 OT 的数学或实施 因此 我想知道是否有一个拖放 JavaScript
  • 如果不可用,Schema.org dateModified 是否应该有一些默认值?

    对于 Schema orgArticle我收到错误https developers google com structured data testing tool for dateModified 建议使用 dateModified 字段
  • 搞乱编码和 XslCompiledTransform

    我正在搞乱编码 一方面 我有一个以 UTF 8 格式响应我的 url 我非常确定 感谢 firebug 插件 我使用以下代码打开读取 UTF 8 格式内容的 url StreamReader reader new StreamReader
  • 姜戈 CSRF 403

    获取 CSRF 403 下面的 console log 语句确认我正在获取令牌 我正在将请求提交到本地服务器上的同一域 internal csrfToken cookie csrftoken internal csrfSafeMethod
  • 使用线程调用 Py_Finalize 时出现 AssertionError(仅限 3.X)

    当我从与 python 调用不同的 C 线程调用 C API 的 Py Finalize 时 我收到错误输出 我看到的错误是 Exception ignored in
  • 使用 Mockito 匹配特定类型的空列表

    我有一个需要一些参数的方法 其中之一是某个类的 List 并且 null 是该参数的可接受值 public void doStuff String string Nullable List
  • 将参数传递给重写的 OnEndPage 方法

    我需要将参数传递给 OnEndPage 方法的重写版本 当我声明该参数时 我没有收到任何错误 但当我调用该方法时 它告诉我 无法将 void 隐式转换为 itextsharp text pdf ipdfpageevent 这是我的 OnEn
  • 配置 SQL*Plus 以仅返回数据

    我需要编写一个简单的 shell 函数 该函数从 Oracle DB 返回单个字段 举例来说SELECT ABC FROM dual ABC就是我所追求的 这是我的功能 function getSomeOraVal sqlplus USER
  • VBA有ATan2函数吗?

    我想计算一下atan2在 VBA 中 但我不确定该函数是否存在 或者甚至不确定在哪里可以找到内置 VBA 函数的规范列表 我没有使用 Excel 因此无法调用工作表 I could 实施 atan2我自己 但如果可能的话我宁愿避免这样做 正
  • 在 PHP 5.4 中禁用严格标准

    我目前在 php 5 4 上运行一个网站 在此之前我在 5 3 8 上运行我的网站 不幸的是 php 5 4 结合了E ALL and E STRICT 这意味着我之前的设置error reporting现在不起作用 我之前的值是E ALL
  • 如何阻止Spring Boot添加会话cookie?

    我有一个 Spring Boot Web 应用程序 我正在尝试将其设为无状态 在我的 WebSecurityConfigurerAdapter 中我设置了 http sessionManagement sessionCreationPoli
  • Twitter 用户脚本会影响除预期 (@included) 页面之外的页面吗?

    下面的用户脚本适用于我自己的 Twitter 个人资料页面 而不是时间线 UserScript name CoolScript include https twitter com IJNanayakkara include https tw
  • 如何使用 JavaScript 从 OneSignal 获取用户 ID?

    我在我的 webview 应用程序中实现了 OneSignal CURL 代码 该代码向每个用户发送通知 为了根据 OneSignal 的用户 ID 定位特定用户 我尝试使用下面的代码来获取用户 ID window OneSignal wi
  • 从进程中关闭正在运行的程序

    如何从子进程中关闭程序 分叉示例 import easygui import multiprocessing def func reply easygui buttonbox start image F project phonber pn
  • 如何用Java从给定的数字列表中生成随机数

    假设我有一个像 1 3 7 9 这样的数字数组 向量 那么我需要从这个列表中随机猜测一个数字 在 Java 中使用 Random 类似乎不可能做到这一点 谁能帮我告诉我一种做这种事情的方法 我必须更改用于生成随机数的数字列表 我正在尝试实施
  • Python 3.4 在生成一些(但不是全部)带有分段错误 11 的 Cartopy 地图时崩溃

    我已经在运行 El Capitan 10 11 6 和 Python 3 4 的 Mac 上安装了 Python 映射工具 Cartopy 我可以使用 Cartopy 成功绘制一些地图 但在某些情况下 Python 内核会因分段错误 11