繁体   English   中英

RPi 上的 Numpy 导入错误“未定义符号:PyFPE_jbuf”

[英]Numpy import error "undefined symbol: PyFPE_jbuf" on RPi

语境

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

我的 RPi 安装是全新的 microSD。 我运行Raspbian巴斯特比其他在这个系统上之前没有做过任何sudo apt update && sudo apt upgrade ,安装python3.5,并尝试安装TensorFlow轮文件使用(的最后一个) python -m pip install <tensorflow>.whl

我正在使用干净的 virtualenv 和 pip 来安装 python 包( pip install ...python -m pip install ...在 env 中)。 安装没有错误或警告; 事情看起来很好,直到我尝试使用/导入 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 安装适用于 python3.7 virtualenv

更新

我按照 phd 的评论并尝试从源代码构建( git clone ...cd numpypython setup.py都在 python3.5 上的 virtualenv 中)。 这导致了相同的丢失符号,尽管在不同的地方。 它看起来与 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 失败。

您需要从源代码编译numpy 获取numpy 1.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM