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 地图时崩溃 的相关文章

  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • Python 2.7 将比特币私钥转换为 WIF 私钥

    作为一名编码新手 我刚刚完成了教程 教程是这样的 https www youtube com watch v tX XokHf nI https www youtube com watch v tX XokHf nI 我想用 1 个易于阅读
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • 如何在 PyCharm 4.5.2 中使用 PyPy 作为标准/默认解释器?

    如何在 PyCharm 4 5 2 中使用 PyPy 作为标准 默认解释器 一切都在 Ubunutu 14 10 下运行 并且 pypy 已经安装 您可以在项目的设置下进行配置 这个官方文档直接涵盖了 https www jetbrains
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • Python Pandas 根据另一列的总计从另一个数据帧中选择值

    我下面有一个 DataFrame 但我需要根据取消和订单列从每个代码中选择行 假设代码 xxx 的阶数为 6 1 5 1 阶数为 11 我需要一种算法 可以选择满足总共 11 行的行 阶数为 6 5 如果没有行匹配 则选择最接近的 id 并
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 如果两个可能条件中的任何一个成立,则 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