C++ - Python 使用 numpy 嵌入

C++ - Python Embedding with numpy

我想从 C++ 调用 python 函数并获取 return 值。我已经能够使用 this 网站第 5.3 节中的示例代码通过简单的乘法 python 函数来做到这一点。要编译我的程序,我会 运行 g++ test.cpp -I/usr/include/python2.7 -lpython2.7。但是,我想要 运行 的 python 函数导入 numpy。当我尝试 运行 我的程序类似于上面提到的代码示例时,我得到一个 "ImportError: cannot import name _remove_dead_weakref"。完整的错误在这里:

Traceback (most recent call last):
  File "/home/osboxes/Desktop/test.py", line 1, in <module>
    import numpy as np 
  File "/home/osboxes/.local/lib/python2.7/site-packages/numpy/__init__.py", line 142, in <module>
    from . import add_newdocs
  File "/home/osboxes/.local/lib/python2.7/site-packages/numpy/add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "/home/osboxes/.local/lib/python2.7/site-packages/numpy/lib/__init__.py", line 8, in <module>
    from .type_check import *
  File "/home/osboxes/.local/lib/python2.7/site-packages/numpy/lib/type_check.py", line 11, in <module>
    import numpy.core.numeric as _nx
  File "/home/osboxes/.local/lib/python2.7/site-packages/numpy/core/__init__.py", line 74, in <module>
    from numpy.testing.nosetester import _numpy_tester
  File "/home/osboxes/.local/lib/python2.7/site-packages/numpy/testing/__init__.py", line 10, in <module>
    from unittest import TestCase
  File "/home/osboxes/miniconda2/lib/python2.7/unittest/__init__.py", line 64, in <module>
    from .main import TestProgram, main
  File "/home/osboxes/miniconda2/lib/python2.7/unittest/main.py", line 7, in <module>
    from . import loader, runner
  File "/home/osboxes/miniconda2/lib/python2.7/unittest/runner.py", line 7, in <module>
    from .signals import registerResult
  File "/home/osboxes/miniconda2/lib/python2.7/unittest/signals.py", line 2, in <module>
    import weakref
  File "/home/osboxes/miniconda2/lib/python2.7/weakref.py", line 14, in <module>
    from _weakref import (
ImportError: cannot import name _remove_dead_weakref

一些信息:Python 版本是 Python 2.7.14 :: Anaconda, Inc.(python 2.7.14 和我有 anaconda 的版本有区别吗, inc. 最后?) python 程序本身也 运行 很好。任何帮助,将不胜感激。谢谢!

编辑:路径很奇怪,有些部分转到我的本地 python,而 numpy 转到 miniconda 的 python。卸载 miniconda,因为我不需要它来修复它。

发生这种情况是因为您的环境混合了两种不同的 Python 安装。您可以在此处看到它在它们之间跳转:

File "/home/osboxes/.local/lib/python2.7/site-packages/numpy/testing/__init__.py"
File "/home/osboxes/miniconda2/lib/python2.7/unittest/__init__.py"

所以你从 /home/osboxes/.local/lib/python2.7/site-packages 开始,它是由一些系统包管理器安装的 Python(或者甚至可能从源代码明确安装)。但随后它跳转到来自 Conda 的 /home/osboxes/miniconda2/lib/python2.7

由于您似乎打算使用 Conda 中的 Python,因此您需要使用 Conda 安装 NumPy(因此它是从 miniconda2 而不是 .local 加载的,并构建您的使用类似 -I/home/osboxes/miniconda2/include/python2.7 而不是 -I/usr/include/python2.7.

的代码