簡體   English   中英

封裝內參考+ cython

[英]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文件中的導入必須是對該軟件包的絕對導入或相對導入。 這是兩種方法的演示:

Arm.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:
... 

Arm.pxd(絕對導入)

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:
... 
  • 目前尚不清楚如何編譯Cython模塊,但是在我的實驗中,如果您使用cythonize -b <module.pyx> ,則必須從程序包外部運行它,否則編譯會失敗,並且缺少cimport模塊“。” 錯誤。
  • 如果您使用setup.py進行編譯,那么在遵循教程指南的情況下,它們都應該可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM