我正在对我的代码进行cython化,而且我是新手。
我的结构是:
.
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&amp; ArmParameters。我认为这些模块的路径不是正确的。 我尝试使用 cimport 并在网上搜索,但我没有找到解决方法。
你能帮我解决这个问题:-D
非常感谢^ - ^
由于
---编辑7/1/12 -------------
我发现所有文件都编译得很好,但是它们是在正确的文件夹中编译的:-S。
如果我抓住那些* .so文件并将它们添加到我的包文件夹中,一切都在运行(包括内部包依赖)。
下一步是理解为什么编译器没有把文件放在我想要的地方:-D
答案 0 :(得分:0)
您必须仔细阅读Python docs for package imports。 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而失败。&#39; 错误。setup.py
进行编译,那么只要您遵循教程指南,这一切都会正常工作。