python - C++ - 使用 numpy 嵌入 Python

标签 python c++ numpy python-embedding

我想从 C++ 调用 python 函数并获取返回值。我已经能够通过使用 this 的简单乘法 python 函数来做到这一点。 5.3 节中的网站示例代码。要编译我的程序,我会运行 g++ test.cpp -I/usr/include/python2.7 -lpython2.7。但是,我要运行的 python 函数导入 numpy。当我尝试运行与上述代码示例中的程序类似的程序时,出现“ImportError:无法导入名称 _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

关于python - C++ - 使用 numpy 嵌入 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594048/

相关文章:

python - StringIO 生成的包含 BOM 的 csv 文件

c# - 以编程方式使用 jira 的最佳方法

c++ - 使用 <ctime> 和指令重新排序进行基准测试

c++ - 执行 int 3 中断会停止 Linux 上的整个进程还是仅停止当前线程?

Python - 在带标签的多维数组上应用函数

java - 有没有办法影响 Python 中的范围计数器?

python - 马尼姆图表下的颜色区域

c++ - BlackBerry 10 Cascades - 如何导航到另一个 CPP 类

python - 反转二进制数组中的 0 和 1

python - 将 Numpy 数组调整为不同大小块的更有效方法