[英]Intra-package references + cython
大家下午好。 祝您在2016年新年快樂。
我正在對我的代碼進行cythonize,這是我的新手。
我的結構是:
.
MotorControlModel
├─ runTest.py
├─ ArmModel
├─ Arm.pyx
├─ Arm.pxd
├─ ArmParameters.pxd
├─ ArmParameters.pyx
├─ MusclesParameters.pxd
├─ MusclesParameters.pyd
Arm.pxd:
import numpy as np
cimport numpy as np
import MusclesParameters
from MusclesParameters cimport MusclesParameters
import ArmParameters
from ArmParameters cimport ArmParameters
cdef class Arm:
...
ArmParameters.pxd:
import numpy as np
cimport numpy as np
cdef class ArmParameters :
...
MusclesParameters.pxd:
import numpy as np
cimport numpy as np
cdef class MusclesParameters:
...
runTest.py:
import numpy as np
import os
import ArmModel
print("--------------Muscles---------------")
from ArmModel import MusclesParameters as MusclesParam
Muscles = MusclesParam.MusclesParameters()
print("--------------ArmParam---------------")
from ArmModel import ArmParameters as ArmParam
ArmParam = ArmParam.ArmParameters()
print("--------------Arm---------------")
from ArmModel import Arm as Arm
arm1 = Arm.Arm()
我的問題是以下問題:如果我運行:
python runTest.py
我收到一條錯誤消息:
--------------Muscles---------------
init MusclesParameters
--------------ArmParam---------------
init ArmParameters
--------------Arm---------------
Traceback (most recent call last):
File "runTest.py", line 19, in <module>
from ArmModel import Arm as Arm
File "MotorControlModel/ArmModel/MusclesParameters.pxd", line 4, in init MotorControlModel.ArmModel.Arm (Arm.c:8082)
ImportError: No module named MotorControlModel.ArmModel.MusclesParameters
正如我在錯誤日志中看到的那樣,Arm.pxd無法鏈接到MusclesParameters和ArmParameters。 我認為通往這些模塊的道路不正確。 我嘗試使用cimport並在網上搜索,但沒有找到解決方法。
你能幫我這個東西嗎:-D
非常感謝^-^
謝謝
---編輯7/1/12 -------------
我發現所有文件都已正確編譯,例如它們是在正確的文件夾中編譯的:-S。
如果我抓取那些* .so文件並將其添加到我的包文件夾中,則所有程序都將運行(包括包內依賴項)。
下一步是了解為什么編譯器沒有將文件放在我想要的位置:-D
您必須仔細閱讀Python文檔以了解包導入 。 Cython遵循相同的規則。 好像是 :
ArmModel/__init__.py
。 它可以為空,但必須存在。 .pxd
文件中的導入必須是對該軟件包的絕對導入或相對導入。 這是兩種方法的演示: import numpy as np
cimport numpy as np
from . import MusclesParameters
from .MusclesParameters cimport MusclesParameters
from . import ArmParameters
from .ArmParameters cimport ArmParameters
cdef class Arm:
...
import numpy as np
cimport numpy as np
from ArmModel import MusclesParameters
from ArmModel.MusclesParameters cimport MusclesParameters
from ArmModel import ArmParameters
from ArmModel.ArmParameters cimport ArmParameters
cdef class Arm:
...
cythonize -b <module.pyx>
,則必須從程序包外部運行它,否則編譯會失敗,並且缺少cimport模塊“。” 錯誤。 setup.py
進行編譯,那么在遵循教程指南的情況下,它們都應該可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.