ฉันเคยเห็นคำถามนี้ และดูเหมือนว่าคำตอบจะไม่ได้ผล ต่อไปนี้เป็นโครงสร้างไดเร็กทอรีของฉัน
.
├── my_package
│ ├── a.pyx
│ ├── b.pyx
│ ├── b.pxd
│ ├── test.py
│ └── __init__.py
└── setup.py
ไฟล์ a.pyx
cimport my_package.b as b
class a:
def __init__(self):
self.b = b.b()
self.b.run()
ไฟล์ b.pyx
cdef class b:
def __init__(self):
pass
cpdef run(self):
print "b is running"
ไฟล์ b.pxd
cdef class b:
cpdef run(self)
test.py
import a
c = a.a()
setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy
extensions = [
Extension("my_package.a", ["my_package/a.pyx"]
),
Extension("my_package.b", ["my_package/b.pyx"]
)
]
for e in extensions:
e.cython_directives = {"embedsignature": True}
setup(
name = "preprocess",
ext_modules = cythonize(extensions),
)
หลังจากรัน python setup.py build_ext --inplace
แล้วไม่มีข้อผิดพลาดในการคอมไพล์ แต่ถ้าฉันพยายามเรียกใช้ test.py มันจะให้ ImportError: No module named my_package.b
ข้อมูลใด ๆ จะได้รับการชื่นชม
BTW ถ้าเราเปลี่ยนบรรทัดแรกของ a.pyx จาก cimport my_package.b as b
เป็น import b
มันจะใช้ได้