C ++ - Python嵌入与numpy

时间:2018-04-01 01:43:43

标签: python c++ numpy python-embedding

我想从C ++调用python函数并获取返回值。我已经能够使用第5.3节中的this网站示例代码使用简单的乘法python函数来实现这一点。要编译我的程序,我会运行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,因为我不需要修理它。

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您的环境混合了两种不同的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加载的,并使用{{{{}}之类的内容构建代码1}}而不是-I/home/osboxes/miniconda2/include/python2.7

相关问题