繁体   English   中英

C ++-使用numpy嵌入Python

[英]C++ - Python Embedding with numpy

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

暂无
暂无

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

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