我在Cython(Python 3.5)中遇到了问题,无法在单个包的模块之间进行导入。
我遇到的错误是“SystemError: Parent module '' not loaded, cannot perform relative import”,即使我明显使用了绝对导入。
下面是我使用的简单测试设置。这可以使用纯Python版本的以下内容(.py而不是.pyx且没有编译)正常工作,但不能通过Cython编译。请注意,我实际上没有在以下示例中使用任何Cython语言功能,只是编译。
似乎有关于结构方面的问题我没有完全理解?但我就是无法弄清楚如何使其正常工作。
文件结构:
我遇到的错误是“SystemError: Parent module '' not loaded, cannot perform relative import”,即使我明显使用了绝对导入。
下面是我使用的简单测试设置。这可以使用纯Python版本的以下内容(.py而不是.pyx且没有编译)正常工作,但不能通过Cython编译。请注意,我实际上没有在以下示例中使用任何Cython语言功能,只是编译。
似乎有关于结构方面的问题我没有完全理解?但我就是无法弄清楚如何使其正常工作。
文件结构:
PackageMain
|
+--__init__.py (this is empty)
+--PackageMain.pyx
+--SomeModule.pyx
+--setup.py
文件PackageMain.pyx
from PackageMain.SomeModule import SomeClass2 # get same error with relative import, ie just .SomeModule
class SomeClass1:
def __init__(self):
foo = SomeClass2()
文件 SomeModule.pyx
:
class SomeClass2:
def __init__(self):
print("Whoop!")
文件 setup.py
:
from distutils.core import setup, Extension
from Cython.Build import cythonize
extensions = [ Extension(language="c++", name="PackageMain",
sources=["PackageMain.pyx", "SomeModule.pyx"])]
setup( name = 'Some name',
ext_modules = cythonize(extensions) )
使用Cython生成的.pyd
文件来运行from PackageMain import PackageMain
会导致上述错误。