簡體   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