【问题标题】:Numpy import error "undefined symbol: PyFPE_jbuf" on RPiRPi 上的 Numpy 导入错误“未定义符号:PyFPE_jbuf”
【发布时间】:2020-01-31 01:26:07
【问题描述】:

上下文

我正在尝试在我的 Raspberry Pi 上安装 TensorFlow,但 numpy 无法正常工作。

我的 RPi 安装是来自 microSD 的全新安装。我正在运行 Raspbian Buster,除了sudo apt update && sudo apt upgrade 之外,我之前没有在这个系统上做过任何事情,安装 python3.5,并尝试使用python -m pip install <tensorflow>.whl 安装TensorFlow wheel file(最后一个)。

我正在使用一个干净的 virtualenv 和 pip 来安装 python 包(pip install ...python -m pip install ... 在环境中)。安装没有错误或警告;在我尝试使用/导入 numpy 之前,一切看起来都很好。

标题中提到的错误如下:

Python 3.5.4 (default, Sep  5 2017, 18:32:10) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pi/tensorflow/lib/python3.5/site-packages/numpy/__init__.py", line 152, in <module>
    from . import random
  File "/home/pi/tensorflow/lib/python3.5/site-packages/numpy/random/__init__.py", line 181, in <module>
    from . import _pickle
  File "/home/pi/tensorflow/lib/python3.5/site-packages/numpy/random/_pickle.py", line 1, in <module>
    from .mtrand import RandomState
ImportError: /home/pi/tensorflow/lib/python3.5/site-packages/numpy/random/mtrand.cpython-35m-arm-linux-gnueabihf.so: undefined symbol: PyFPE_jbuf

复制

我可以通过使用 python3.5、pip install numpypython -m pip ... 启动一个干净的 virtualenv,然后尝试像上面一样导入 numpy 来持续重现这一点。

尝试

我看到的与此相关的大多数其他问题都与 cython 安装路径或计算机上有另一个 numpy 有关,所以这是我到目前为止所做的:

  1. 卸载了pi上默认的numpy安装

  2. 安装 cython,重新安装 numpy

  3. 使用pip install --no-cache-dir numpy安装numpy

注意

numpy 安装适用于 python3.7 virtualenv

更新

我遵循 phd 的评论并尝试从源代码构建(git clone ...cd numpypython setup.py all in the virtualenv on python3.5)。这导致了相同的缺失符号,尽管在不同的地方。它看起来与 Cython 相关?

Running from numpy source directory.
Cythonizing sources
Processing numpy/random/bounded_integers.pxd.in
Processing numpy/random/bounded_integers.pyx.in
Traceback (most recent call last):
  File "/usr/lib/python3.5/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/pi/tensorflow/lib/python3.5/site-packages/cython.py", line 17, in <module>
    main(command_line = 1)
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Main.py", line 858, in main
    result = compile(sources, options)
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Main.py", line 780, in compile
    return compile_multiple(source, options)
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Main.py", line 750, in compile_multiple
    context = options.create_context()
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Main.py", line 597, in create_context
    self.cplus, self.language_level, options=self)
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Main.py", line 80, in __init__
    from . import Builtin, CythonScope
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/CythonScope.py", line 5, in <module>
    from .UtilityCode import CythonUtilityCode
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/UtilityCode.py", line 3, in <module>
    from .TreeFragment import parse_from_strings, StringParseContext
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/TreeFragment.py", line 17, in <module>
    from .Visitor import VisitorTransform
  File "Cython/Compiler/Visitor.py", line 17, in init Cython.Compiler.Visitor
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/ExprNodes.py", line 4724, in <module>
    class SliceIndexNode(ExprNode):
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/ExprNodes.py", line 4922, in SliceIndexNode
    "SliceObject", "ObjectHandling.c", context={'access': 'Get'})
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Code.py", line 404, in load
    return cls(**kwargs)
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Code.py", line 648, in __init__
    proto = sub_tempita(proto, context, file, name)
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Compiler/Code.py", line 640, in sub_tempita
    from ..Tempita import sub
  File "/home/pi/tensorflow/lib/python3.5/site-packages/Cython/Tempita/__init__.py", line 4, in <module>
    from ._tempita import *
ImportError: /home/pi/tensorflow/lib/python3.5/site-packages/Cython/Tempita/_tempita.cpython-35m-arm-linux-gnueabihf.so: undefined symbol: PyFPE_jbuf

在此之后它只是告诉我在 setup.py 中运行 cythonize 失败。

【问题讨论】:

  • 为什么我看到 python3.5 有误?当你声称你已经安装了python3.7!
  • 您安装的二进制轮似乎与系统库不兼容。尝试从源代码编译numpy
  • @Mohsen_Fatemi 我正在尝试在 python3.5 上安装 numpy,因为给定的 TensorFlow 轮子适用于 python3.5

标签: python python-3.x numpy pip


【解决方案1】:

您需要从源代码编译numpy。获取numpy1.18.5

wget https://github.com/numpy/numpy/archive/refs/tags/v1.18.5.tar.gz

卸载当前Python 3.5numpy并安装cython模块:

pip3.5 uninstall numpy
pip3.5 install cython==0.29.22

切换目录到numpy 1.18.5的源代码,安装:

python3.5 setup.py install

完成后,您的代码将能够成功运行import numpy

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 2017-02-22
    • 1970-01-01
    • 2014-06-30
    • 2023-04-10
    • 2016-08-28
    • 2018-08-02
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多