我想从 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/